此问题在此处已有答案:
How can I bind an array of strings with a mysqli prepared statement?(7个答案)
六年前关闭了。
我在网上到处寻找这个问题的答案,出现了预准备语句和绑定参数(我不知道那是什么东西)
基本上,我有一个逗号分隔的列表
$list = 'food, drink, cooking';
好了,现在我想在数据库的一列中搜索这些项中的每一项......听起来很简单,对吧?
$query = "SELECT * FROM table WHERE stuff IN ('$list')";
$runquery = mysqli_query($connection, $query);
while($row = mysqli_fetch_array($runquery,MYSQLI_ASSOC)){
$variable = $row;
}
后来,
var_dump($variable);
未定义变量
为什么?我看不出代码有什么问题。如果我输入一个特定的值,它就可以工作,而且我已经用WHERE stuff=$item
测试过了-它工作得很好。
所以不是变量/数据库的问题,而是IN语句的错误,我不明白为什么它不起作用。
2条答案
按热度按时间sqserrrh1#
先在数组中分解
然后使用单独的占位符将每个元素绑定到查询中。
7xllpg7q2#
我怀疑,任何时候查询没有返回一行,你就会得到那个未定义的变量,我们看不到变量是在任何地方定义/初始化的,除非在获取一行之后。
至于查询不返回行的原因,您的查询等效于
这是单个字符串文字。查询只返回列填充值等于该字符串的行。字符串中的逗号只是值的一部分。如果要查找填充值包含任何值的行,则查询需要采用以下形式:
请注意,这是三个单独的字符串文字,用逗号分隔。逗号是SQL语句的一部分,而不是值的一部分。这将返回列内容包含“food”、“drink”或“cooking”的行。
这就是为什么你的查询“不起作用”。