gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:24:30 24 4
gpt4 key购买 nike

好的,所以我现在已经折腾了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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com