【问题标题】:Trouble converting PDO query to MySQLi将 PDO 查询转换为 MySQLi 时遇到问题
【发布时间】:2015-04-24 13:58:42
【问题描述】:

我有一个在 PDO 中运行良好的查询,但我需要将查询转换为 MySQLi 以与旧服务器兼容。

这里是 PDO 查询:

$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT * FROM users WHERE username=:username";
$st = $conn->prepare( $sql );
$st->bindValue( ":username", $username, PDO::PARAM_STR );
$st->execute();

while ( $row = $st->fetch() ) {
  $db_username = $row['username'];
  $db_password = $row['password'];
}

这是我对 MySQLi 的要求,但它似乎不起作用:

$mysqli = new mysqli( 'localhost', DB_USERNAME, DB_PASSWORD, DB_NAME );
$username = mysqli_real_escape_string($mysqli, $username);
$query = "SELECT * FROM users WHERE username=$username";
if ($result = $mysqli->query($query)) {
while ($obj = $result->fetch_object()) {
  $db_username = $obj->username;
  $db_password = $obj->password;
}
mysqli_free_result($result);
}

任何帮助将不胜感激:)

【问题讨论】:

  • $username 是从登录表单中捕获的变量(上面未包含)
  • $query = "SELECT * FROM users WHERE username=' ".$username.' "";
  • @saty NONONO,那么你没有参数化你的查询..

标签: php pdo mysqli


【解决方案1】:

尝试使用mysqli准备好的语句系统

$mysqli = new mysqli( 'localhost', DB_USERNAME, DB_PASSWORD, DB_NAME );

$query = "SELECT username, password FROM users WHERE username=?";
$prep = $mysqli->prepare($query);
$prep->bind_param('s', $username);
$prep->execute();
$result = $prep->get_result(); // Make sure you have mysqlnd installed
if($result) {
    while ($obj = $result->fetch_object()) {
         $db_username = $obj->username;
         $db_password = $obj->password;
    }
mysqli_free_result($result);
}

如果您没有安装 mysqlnd,那么不太直观的方法涉及bind_param

$prep->execute();
$prep->bind_result($db_username, $db_password);
$prep->fetch();

【讨论】:

  • 感谢@Machavity,但我遇到了麻烦。提交时我得到一个空白屏幕并尝试打开错误报告:$status = $prep->execute(); if ($status === false) { die(mysqli_error($mysqli)); }
  • 你安装了mysqlnd吗?
  • 我以为我做到了,但很抱歉刚刚检查过,不,我没有:(
  • 好的,然后试试更麻烦的bind_result
  • 太棒了!现在所有工作都使用 bind_result。感谢您的所有帮助:) 如果可以的话,我会投票...
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多