PHP SQL STMT SELECT multiple LIKE ?可能吗?

PHP SQL STMT SELECT multiple LIKE ? is it possible?

提问人:Dajs 提问时间:1/17/2020 最后编辑:DharmanDajs 更新时间:1/17/2020 访问量:120

问:

SELECT * 
FROM datatable 
WHERE Name LIKE ? 
OR Code LIKE ? 
OR Date LIKE ? 
OR Inserter LIKE ? 
AND ID = '2'

php sql 连接中出现错误: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in

这是错误代码,我正在使用

stmt->prepare, stmt->execute 

以此类推。

这适用于一个 LIKE ?(WHERE 名称喜欢?AND ID = '2')。

如何更换或解决此问题?

真正的代码

if ($stmt = $db->prepare($SearchQuery)) { 
    // Bind variables to the prepared statement as parameters 
    $stmt->bind_param("s", $param_term); 
    // Set parameters $param_term = '%' . $_POST["String"] . '%'; 
    // Attempt to execute the prepared statement 
    if ($stmt->execute()) { 
        $result = $stmt->get_result(); 
php mysql sql 选择 mysqli

评论

0赞 jarlh 1/17/2020
请注意,AND 位于 OR 之前。你可能想要.WHERE (Name LIKE ? OR Code LIKE ? OR Date LIKE ? OR Inserter LIKE ?) AND ID = '2'
1赞 Kevin 1/17/2020
它只是一个查询语句,您需要添加与错误相关的代码块
0赞 Dajs 1/17/2020
不。我确实尝试过这个解决方案,但它不起作用。它有同样的错误。
1赞 RiggsFolly 1/17/2020
请阅读错误消息。这是说您没有传递正确数量的值来匹配所有向我们展示您的真实代码。您实际上是否传递了任何值来替换参数??
1赞 Akina 1/17/2020
您使用 4 个占位符。所以你必须给出 4 个参数。也许相同的参数 4 次。

答:

0赞 Akina 1/17/2020 #1

如果要严格地将参数的一个副本传输到查询中(假设您搜索相同的模式),则可以使用

SELECT * 
FROM datatable 
WHERE CONCAT_WS(CHAR(X), Name,Code,Date,Inserter) LIKE ? 
AND ID = '2'

其中 CHAR(x) 是在字段或模式中找不到的任何字符。

评论

0赞 Akina 1/17/2020
@RiggsFolly我看到OP无法理解错误消息。但展示的技术也可能解决他的问题......为什么不通知OP呢?
0赞 RiggsFolly 1/17/2020
你说得好,我最初并不认为这是一种只使用一个参数的方法:)
2赞 RiggsFolly 1/17/2020 #2

您有 4 个参数,并且只绑定一个值?

$stmt->bind_param("s", $param_term); 

这应该是

$stmt->bind_param("ssss", $param_term,
                        $param_term,
                        $param_term,
                        $param_term); 

以便每个参数都获得一个值。?

此外,查询需要括号才能像这样正常工作

WHERE (Name LIKE ? 
    OR Code LIKE ? 
    OR Date LIKE ? 
    OR Inserter LIKE ? ) 
AND ID = '2'