正确的 MySQLi 参数化查询语法来自http://php.net/manual/en/mysqli.quickstart.prepared-statements.php http://php.net/manual/en/mysqli.quickstart.prepared-statements.php:
$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)");
$stmt->bind_param("i", $id);
但从来没有这样的事情:
$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (:id_value)");
$stmt->bind_param("i", "id_value", $id);
在我看来named parameter
替换是在 API 级别实现的合理功能。我很惊讶 MySQLi 只实现了unnamed parameters
在图书馆。
有正当理由吗?看到 PDO、DQL、ORM 都如何在查询中采用命名参数,这对我来说没有意义。
我希望 MySQLi 开发人员不会出现“我们很懒并且不想”的情况。我相信一定有一个很好的理由,并且我正在寻找那个理由,或者寻找那个理由的方法。 MySQLi 扩展库中未实现命名参数的原因。
MYSQLi
不支持命名参数有两个主要原因:
- 它“旨在”(我宽松地使用这个术语)与包装器一起使用,并且
- 是对应的,
PDO
,确实 - 并且没有必要重新发明轮子
详细说明第1点:mysqli
,尽管与PDO
,变得很容易与良好的包装器相媲美 - 也就是说,包装器支持命名参数(除其他外),而不是mysqli
本身。这是设计使然,只有一个原因:
-
Mysqli
被设计为一个快速且灵活的库。
如果开发人员将更多功能合并到基础库中,与直觉相反,它就会变得不太灵活,并且需要更长的加载/执行时间。
Both mysqli
and pdo
与 PHP 5 一起发布(我相信 PDO 版本为 5.3),因此适用于不同的用途。
您想要更快的执行时间吗?使用mysqli
没有包装纸。您想要命名参数吗?使用PDO
或建立一个mysqli
包装器来处理此类问题 - 但请注意,这会阻碍您的执行时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)