将参数绑定到SQL语句时,可以提供类似的参数类型PDO::PARAM_STR.如果不这样做,请键入默认值PDO::PARAM_STR.具体设置每个参数类型的原因是什么?PDO :: PARAM_STR适用于任何参数,至少在MySQL中我知道.我认为即使使用PDO :: PARAM_STR也可以使用BLOB列.
PDO :: PARAM_STR不会引入任何SQL注入,因为您仍然准备好了查询.
使用PARAM_STR恰好总是在列值中起作用,因为mySQL会隐式地将值转换为正确的类型,但它会失败,例如在此查询中:
$limit = 1;
$dbh->prepare("SELECT * FROM items LIMIT :limit");
$dbh->bindParam(":limit", $limit, PDO::PARAM_STR);
// Will throw "You have an error in your SQL syntax..."
Run Code Online (Sandbox Code Playgroud)
一个应该绝对使用PARAM_INT在适当的地方 - 对于像上面这样的情况,并准备除了mySQL之外的数据库引擎,可能对它们的期望更严格.
我个人认为没有理由,只要你设置了这个属性:
$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
Run Code Online (Sandbox Code Playgroud)
所以,它会自动检测LIMIT情况
无论如何,我更喜欢在占位符中定义类型,而不是在绑定函数中.
但是,我对PDO的体验并不那么强烈.我刚试了一下,决定转回普通的mysql.
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |