类似的问题已经被问过很多次,但是在阅读了几乎每一个超过5个小时的问题之后,我还没有找到适合我的问题的答案。
我不是一个有经验的php / mysql开发人员,但我使用mysqli_stmt_bind_param()func管理了类似的情况。
下面是查询:
$query = 'SELECT Recipes.* , Categories.* FROM `Recipes` JOIN `Categories` ON JSON_EXTRACT(Recipes.category, \'$.category\') = \'Category ?\' WHERE Categories.category = ?';
我用这个php代码:
if ($stmt = mysqli_prepare($dbManager->getDBInstance(), $query)){
mysqli_stmt_bind_param($stmt,"ii", $id, $id);
}
因为我在客户端有一个模型,比如:
{
"category" : "...",
"recipes" : [{...},{...}]
}
错误是:致命错误:未捕获mysqli_sql_exception:未为预准备语句中的参数提供数据
我已经使用更多参数进行了类似的查询,没有任何错误:但是,这是我第一次使用mysql中的JSON_EXTRACT函数。
我相信错误是由 $ 引起的。未正确转义。要替换的参数引用同一变量$id,该变量是一个整数,在第一种情况下(“类别 1”)用于字符串插值,并在 WHERE 子句之后用作数字。
考虑一下,通过使用mysqli_stmt_bind_param,phpmyadmin上的相同查询返回我想要的内容,但这会将我的代码打开mysql注入,这是我想避免的。
另外,请注意,如果我只向函数传递一个参数,脚本就会被执行(结果错误),就像查询在某个时候被截断一样...我正确地转义了每个单引号,甚至尝试使用双引号,但错误总是一样的。
任何关于如何防止注射并达到结果的提示将不胜感激,因为我真的无法自己弄清楚。
谢谢
守着星空守着你
慕斯709654