在mysqli中更改PDO

时间:2013-07-08 12:55:56

标签: php pdo mysqli

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

PDO_conection

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

mysqli_conection

<?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();

我哪里错了?

1 个答案:

答案 0 :(得分: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);

之后您仍然必须使用bind_result,并忘记fetch_assocmysqli_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_resultsave_resultfree_result,...方法,并从那里开始,使用您从语句{{3}获得的mysqli_result实例}}