我在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();
我哪里错了?
答案 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_assoc
。 mysqli_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
,...方法,并从那里开始,使用您从语句{{3}获得的mysqli_result
实例}}