此问题在此处已有答案:
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"));'
型
2条答案
按热度按时间rslzwgfq1#
我们的想法是,
字符串
其中
?
将是一个查询参数。让我们用PDO来做:型
现在,让我们假设你将
$wherestring
附加到你的查询中,你最终会得到一个$query
字符串。让我们运行它:型
在上面的代码中,我已经传递了
$params
到execute
,它们是对应于我嵌入到where
子句中的参数的值。如果你在其他子句中有其他参数,那么它们也需要添加,并且参数需要按照正确的顺序放置。或者,你可以将命名参数嵌入到PDO查询中,比如
:foobar
,但是,在你的场景中,这似乎不是一个整洁的选择,因为你有未知数量的类似参数要添加,所以命名它们并不直观。如果
$curcat
是一个数组,你需要把它转换成一个字符串,以便把它作为一个子字符串连接到一个字符串。但是在学习$curcat
是什么的时候,你需要非常小心,所以你要把它转换成正确的字符串,如果需要的话,也可能改变你的算法。shyt4zoc2#
将implode添加到$curcat的每个示例修复了错误。此外,正如注解中所述,由于语法不正确,实际上并没有添加字符串。
字符串