【问题标题】:PHP SQL STMT SELECT multiple LIKE ? is it possible?PHP SQL STMT 选择多个 LIKE ?可能吗?
【发布时间】:2020-05-04 04:35:59
【问题描述】:
SELECT * 
FROM datatable 
WHERE Name LIKE ? 
OR Code LIKE ? 
OR Date LIKE ? 
OR Inserter LIKE ? 
AND ID = '2'

php sql连接出错: mysqli_stmt::bind_param(): 变量数与预准备语句中的参数数不匹配

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

stmt->prepare, stmt->execute 

等等在 php.ini 中。

这仅适用于一个 LIKE 吗? (WHERE Name LIKE ? 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(); 

【问题讨论】:

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

标签: php mysql sql select mysqli


【解决方案1】:

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

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

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

【讨论】:

  • @RiggsFolly 我看到 OP 无法理解错误消息。但是显示的技术也可以解决他的问题……为什么不通知 OP 呢?
  • 你说得很好,我最初并不认为这是一种只使用一个参数的方式:)
【解决方案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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2019-07-31
    • 2017-08-20
    • 2010-12-11
    • 2012-04-19
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多