我目前正在使用php中的一小组数据库访问和管理类。在尝试更好地理解我们众所周知的mysqli时,我仍然无法理解为什么以及如何在mysqli_stmt :: bind_param中定义的变量类型可以增强当前应用程序中的安全性/实用性。
使用mysql语句的优点很明显。查询和值在两个不同的路径上提交,这当然使应用程序更安全,更加防错!但是这些变量会发生什么......这些是先前通过php检查过的,还是之后在mysql中检查过的?
只是mysqli懒得做某事吗?
!is_numeric($v) && ( !is_null($v) || $v != “NULL”) ? “‘$v’” : $v
或者我不知道mysql端是否有任何var类型定义?
“PREPARE stmt_name FROM … “;
“SET @var1 = 3”;
“SET @var2 = ‘foo’”;
“EXECUTE stmt_name USING @var1, @var2”;
这个值看起来似乎并不多。任何以字符串形式传递的内容都会被正确评估...那么为什么要这么麻烦?
即使与此问题相关,还有另一个问题:有没有办法复制mysqli在数据包中发送blob字符串的方式?
谢谢你
答案 0 :(得分:3)
由于没有人给出答案......我现在有一个答案! bind_param中的数据类型定义注意的不仅仅是将这些引号添加到查询中,尽管变量绑定的级别低于php脚本所能提供的级别!正式通过除mysqli / pdo之外的任何不同路径将意味着通过字符串传输所有数据!
就是这样,欢呼!