MySQLi,预处理语句和关联数组

时间:2012-10-16 13:59:15

标签: php

我从好的'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()或你们做什么?

3 个答案:

答案 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 - 获取结果行   作为关联数组