php - 为什么 mysqli QUERY 有效,但相同的 PREPARED 语句版本返回 SQL 语法错误?

标签 php mysql mysqli

好的,所以我现在已经折腾了2个小时,无法弄清楚所谓的SQL语法错误在哪里。我最终将准备好的语句重写为标准查询 - 它工作正常,语法完全相同。

准备好的声明代码:(不工作)

if ($account_info = $mysqli->prepare("SELECT users.specid, users.username ?
    FROM users ? WHERE users.id = ?")) {
     //A SWITCH to determine bind_param and bind_result
} else {
     //Error output
}

以上结果导致以下 MYSQL 错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? FROM users ? WHERE users.id = ?' at line 1

现在,如果我从字面上改变 '?'到 $variables 并将准备好的语句变成一个普通的查询,如:

if ($account_info = $mysqli->query("SELECT users.specid, users.username $param1 
    FROM users $param2 WHERE users.id = $param3")) {
     //Fetch array and set variables to results
} else {
     //Error output
}

以上代码按预期工作,没有错误。

对于那些好奇我正在测试的特定 switch case 中的 $variables 是什么的人:

$param1 = ', tenants.paper';
$param2 = ', tenants';
$param3 = $_SESSION['user_id'].' AND tenants.id = users.specid';

那么,当它们具有相同的语法时,为什么一个有效而另一个无效呢???它甚至没有到达 bind_param 部分!?我更愿意使用准备好的语句方法。

最佳答案

您不能将对象 nane(表名或列名)作为参数传递。

所以 users.username ?users ? 您尝试使用的是错误的..

传递参数不是字符串替换..

参数绑定(bind)不允许这种行为
你应该避免这种情况......但是如果你真的需要那么尝试使用字符串连接

关于php - 为什么 mysqli QUERY 有效,但相同的 PREPARED 语句版本返回 SQL 语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45072539/

相关文章:

PHP - 只能由另一个类实例化的类

java - 当我更改其端口号而不是 3306 时无法连接到 mysql

php - 搜索每个单词并过滤少于 x 的字符数

php - mysqli 准备不返回表中的结果

php - OpenCart MySQLi 问题

PHP图像显示

PHP 从字符串转换为 int 错误

php - 适用于 blob 的 Azure PHP SAS

java - JPA存储库: How to multiply column value by parameter value

php 遍历 mysql 不显示最近的条目