0

我在mysqli中更改了PDO的连接类型。

PDO_连接

<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=exercise', 'root', 'root');
} catch (PDOException $e){
exit('Datebase error.');
}
?>

mysqli_connection

<?php
$host = "localhost";
$username = "root";
$password = "root";
$dbname = "exercise";
$mysqli = new mysqli($host, $username, $password, $dbname);
if(mysqli_connect_errno()) {
echo "Error: Could not connect to database.";
exit;
}
?>

而现在正试图在mysqli 中更改PDO 中写的一段代码。

PDO_code

$query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_password=? LIMIT 1");
        $query->bindValue(1, $username, PDO::PARAM_STR);
        $query->bindValue(2, $password, PDO::PARAM_STR);
        $query->execute();
        $num = $query->rowCount();
        $row = $query->fetch(PDO::FETCH_ASSOC);

这是我在 mysqli 中改变它的尝试

mysqli_code

$query = $mysqli->prepare("SELECT * FROM users WHERE user_name=? AND user_password=? LIMIT 1");
    $query->bind_result($username, $password);
        $query->execute();
        $num = $query->num_rows;
    $row = $query->fetch_assoc();

我哪里错了?

4

1 回答 1

1

这里有一个问题:

$query = $mysqli->prepare("SELECT * FROM users WHERE user_name=? AND user_password=? LIMIT 1");
$query->bind_result($username, $password);//<==
$query->execute();
$num = $query->num_rows;
$row = $query->fetch_assoc();

绑定结果将传递的变量绑定到结果集,而您想要bind_param

$query->bind_param('ss', $username, $password);

在那之后你仍然必须使用 th bind_result,然后忘记fetch_assoc. Amysqli_stmt只有一个fetch方法:

$query->bind_result($id, $field2);//one var per table field...
while($query->fetch())
{
    echo $id.', '.$field1;
}

我认为很明显为什么SELECT *不推荐...

此外,为了保持一致性,更改mysqli_connection_error()为什么的if ($mysqli->connect_error)mysqli_*提供程序和 OO 风格,但请不要将两者混为一谈。
根据文档,您不能使用它,正如 YourCommonSense 向我指出的那样,因为它在 PHP 5.2.9 和 5.3.0 之前被破坏了。建议保留程序检查以确保兼容性。

完整的:

$stmt = $mysqli->prepare('SELECT id FROM users WHER user_name = ? AND user_password = ?');
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->bind_result($id);
//or, in your case
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$numRows = $result->num_rows;

使用get_result, save_result, free_result,... 方法,然后使用mysqli_result从语句中获得的实例,它包含您所追求的所有好处

于 2013-07-08T13:00:08.967 回答