我从好的'MySQL
切换到MySQLi
(已知的晚期大器官)并选择MySQLi
而不是PDO
。
首先,我喜欢关联数组(eg: $db_data['whatever_field'])
,因此我不能使用预处理语句,因为它不会返回关联数组(默认情况下/没有变通方法)。
所以我必须自己手动准备我的MySQLi
语句,例如:
'SELECT * FROM admin_users WHERE email='. $mysqli->real_escape_string($_COOKIE['admin']['email']) .' AND password='. $mysqli->real_escape_string($_COOKIE['admin']['password']);
你可以想象,这可能会让人厌倦!是否有短$mysqli->real_escape_string()
或你们做什么?
答案 0 :(得分:3)
你不会在我看守儿子的情况下使用Mysqli而不是PDO!
首先,我喜欢关联数组(例如:$ db_data ['whatever_field']),因此我不能使用预处理语句,因为它不会返回关联数组(默认情况下/没有变通方法)。
这是一个不好的借口。
PDOStatement::fetch
接受fetch样式作为第一个参数,可以设置为PDO::FETCH_ASSOC
。
另外,
PDO::setAttribute
可让您选择默认的抓取方式,特别是将PDO::ATTR_DEFAULT_FETCH_MODE
设置为PDO::FETCH_ASSOC
。
参考:
答案 1 :(得分:1)
如果您准备语句而不需要转义,这是准备语句的主要目的之一。
我支持Jeffrey解释为什么要使用PDO,我也想贡献一下,mysqli是一个奇怪的库,如果你不得不真的很难测试。通过引用绑定变量的方式在眼睛上并不容易。 我个人建议你重新考虑你的选择。希望有一天我们弃用mysql和mysqli。
答案 2 :(得分:0)
有一个名为fetch_assoc
的函数。
进一步阅读php手册http://php.net/manual/en/mysqli-result.fetch-assoc.php
mysqli_result :: fetch_assoc - mysqli_fetch_assoc - 获取结果行 作为关联数组