我有以下代码:
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("ss", $table, $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
哪个应该可以正常工作。但是我收到以下错误:
您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '? 附近使用的正确语法。 WHERE upper(ARTICLE_NAME) LIKE '%?%'' 在第 1 行
如果我放
SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';
查询工作正常。上面定义了$table,从GET接收query,都是正确的有效值。为什么会失败?
编辑: 更改为:
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
导致错误:
警告:mysqli_stmt::bind_param() [mysqli-stmt.bind-param]:变量数量与 C:\Program Files\EasyPHP 3.0\www\prog\get_records 中准备好的语句中的参数数量不匹配。第 38 行的 php
命令不同步;你现在不能运行这个命令
在哪里
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", "%".$query."%");
结果
fatal error :无法通过 C:\Program Files\EasyPHP 3.0\www\prog\get_records.php 中第 38 行的引用传递参数 2
最后
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
只会给:
命令不同步;你现在不能运行这个命令
LIKE 语句不能使用参数吗?
最佳答案
对于 LIKE
子句,使用这个:
SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ?, '%')
至于表名,将表名作为参数是一种极其糟糕的做法。
如果出于某种原因您仍然需要这样做,则需要在准备查询之前将其嵌入到查询文本中:
$countQuery = "SELECT ARTICLE_NO FROM $table_name WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ? ,'%')";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
关于php - SQL LIKE 查询失败 - 准备语句中的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/601992/