mysql 如何在PHP中解析数组并将每个元素视为字符串?

b0zn9rqh  于 2024-01-05  发布在  Mysql
关注(0)|答案(2)|浏览(296)

此问题在此处已有答案

Compare multiple values to multiple columns in database with PHP and MySQL?(1个答案)
26天前关闭。
我正在做一个项目,我需要把一个字符串数组转换成一个SQL查询。为了做到这一点,我试图解析数组,并把每个元素放在一个字符串中发送到SQL数据库。然而,当我尝试这样做时,我遇到了一个错误,我在网上看到,这是不可能的,我试图完成这一点。
以下是导致问题的PHP部分:

  1. $wherestring = "(";
  2. foreach ($wherearray as $curcat) {
  3. $wherestring = "(mcat1 = " . $curcat . " OR mcat2 = ". $curcat . " OR mcat3 = ". $curcat . " OR mcat4 = ". $curcat . " OR mcat5 = " . $curcat . ")";
  4. if ($curcat != $lastelement) {
  5. $wherestring = " OR ";
  6. }
  7. }
  8. $wherestring = ");";

字符串
.其中$wherearray是字符串数组,$wherestring是最终要在SQL查询中使用的字符串,$lastelement是数组的最后一个元素。
出现以下错误:
PHP Notice:Array to string conversion in. on line 48(repeats 4 more times)
我的目标是创建以下字符串,给定$wherearray为(1 => 'Summer'):

  1. '((mcat1 = "Summer" OR mcat2 = "Summer" OR mcat3 = "Summer" OR mcat4 = "Summer" OR mcat5 = "Summer"));'

rslzwgfq

rslzwgfq1#

我们的想法是,

  1. "? IN (mcat1, mcat2, mcat3, mcat4, mcat5)"

字符串
其中?将是一个查询参数。让我们用PDO来做:

  1. $items = [];
  2. $params = [];
  3. foreach ($wherearray as $curcat) {
  4. $items[]="(? IN (mcat1, mcat2, mcat3, mcat4, mcat5)");
  5. $params[]=$curcat;
  6. }
  7. $wherestring = "(" . implode(" OR ", $items) . ")";


现在,让我们假设你将$wherestring附加到你的查询中,你最终会得到一个$query字符串。让我们运行它:

  1. $sth = $dbh->prepare($query);
  2. $sth->execute($params);
  3. $result = $sth->fetchAll();


在上面的代码中,我已经传递了$paramsexecute,它们是对应于我嵌入到where子句中的参数的值。如果你在其他子句中有其他参数,那么它们也需要添加,并且参数需要按照正确的顺序放置。
或者,你可以将命名参数嵌入到PDO查询中,比如:foobar,但是,在你的场景中,这似乎不是一个整洁的选择,因为你有未知数量的类似参数要添加,所以命名它们并不直观。
如果$curcat是一个数组,你需要把它转换成一个字符串,以便把它作为一个子字符串连接到一个字符串。但是在学习$curcat是什么的时候,你需要非常小心,所以你要把它转换成正确的字符串,如果需要的话,也可能改变你的算法。

展开查看全部
shyt4zoc

shyt4zoc2#

将implode添加到$curcat的每个示例修复了错误。此外,正如注解中所述,由于语法不正确,实际上并没有添加字符串。

  1. $wherestring = "(";
  2. foreach ($wherearray as $curcat) {
  3. $wherestring .= "(mcat1 = " . implode('',$curcat) . " OR mcat2 = ". implode('',$curcat) . " OR mcat3 = ". implode('',$curcat) . " OR mcat4 = ". implode('',$curcat) . " OR mcat5 = " . implode('',$curcat) . ")";
  4. if ($curcat != $lastelement) {
  5. $wherestring .= " OR ";
  6. }
  7. }
  8. $wherestring .= ");";

字符串

相关问题