首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变mysqli中的PDO

问改变mysqli中的PDO
EN

Stack Overflow用户
提问于 2013-07-08 12:55:56
回答 1查看 1.6K关注 0票数 0

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

PDO_conection

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

mysqli_conection

代码语言:javascript
复制
<?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

代码语言:javascript
复制
$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

代码语言:javascript
复制
$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();

我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-08 13:00:08

这里有一个问题:

代码语言:javascript
复制
$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

代码语言:javascript
复制
$query->bind_param('ss', $username, $password);

在此之后,您仍然必须使用th bind_result,并且忘记fetch_assoc。mysqli_stmt只有一个fetch方法:

代码语言:javascript
复制
$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_*提供了过程性和面向对象的风格,但请不要将两者混合在一起。

根据这些文档,您不能使用它,正如YourCommonSense向我指出的那样,因为它是在PHP5.2.9和5.3.0之前被破坏的。建议保留过程检查以确保兼容性。

因此,全文如下:

代码语言:javascript
复制
$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 .方法,并从此使用从语句所有你要找的东西获得的所有你要找的东西实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17527226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档