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

b0zn9rqh  于 12个月前  发布在  Mysql
关注(0)|答案(2)|浏览(223)

此问题在此处已有答案

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

$wherestring = "(";
    foreach ($wherearray as $curcat) {
        $wherestring = "(mcat1 = " . $curcat . " OR mcat2 = ". $curcat . " OR mcat3 = ". $curcat . " OR mcat4 = ". $curcat . " OR mcat5 = " . $curcat . ")";
        if ($curcat != $lastelement) {
            $wherestring = " OR ";
        }
    }
    $wherestring = ");";

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

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

rslzwgfq

rslzwgfq1#

我们的想法是,

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

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

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


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

$sth = $dbh->prepare($query);
$sth->execute($params);
$result = $sth->fetchAll();


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

shyt4zoc

shyt4zoc2#

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

$wherestring = "(";
    foreach ($wherearray as $curcat) {
        $wherestring .= "(mcat1 = " . implode('',$curcat) . " OR mcat2 = ". implode('',$curcat) . " OR mcat3 = ". implode('',$curcat) . " OR mcat4 = ". implode('',$curcat) . " OR mcat5 = " . implode('',$curcat) . ")";
        if ($curcat != $lastelement) {
            $wherestring .= " OR ";
        }
    }
    $wherestring .= ");";

字符串

相关问题