php - SQL LIKE 查询失败 - 准备语句中的 fatal error

标签 php sql mysql mysqli

我有以下代码:

$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/

相关文章:

php - css高度调整后计算宽度

php - 如何对mysql中的枚举字段进行排序

sql - PL/SQL 将一个字符串按 "+ "拆分并将其中的数字相加?

sql - 在 Access/SQL 中编辑记录问题(写入冲突)

sql - 如何在 Oracle 中查找表中的错误引用

php - MySQL 排序规则

sql - 错误1046 No database Selected,如何解决?

php - Symfony/Doctrine : fetching data as object

php - 首次访问时未设置 Cookie

php - codeigniter - 如何使用 'left join' 子句查询 'where_in'