【问题标题】:How can I convert this mysqli to PDO?如何将此 mysqli 转换为 PDO?
【发布时间】:2021-01-03 14:14:55
【问题描述】:
<?php

    require_once('dbconfig.php');
    global $con;

    $query = $con->prepare("SELECT * FROM userinfo order by id DESC");
    $query->execute();
    mysqli_stmt_bind_result($query, $id, $name, $username, $password);

【问题讨论】:

  • 不要全球化$con,这是一个巨大的安全漏洞,从编码的角度来看也是不好的做法

标签: php mysql mysqli pdo


【解决方案1】:

你应该使用-&gt;bindColumnManual

另见This answer

  • 最佳实践:不要使用SELECT *,而是定义您需要从表格中抓取的每一列。
  • 不要全球化您的连接变量。这是一个安全风险以及增加臃肿,您的代码应该不需要。
  • 因为它是一个静态语句,您可以使用-&gt;query 而不是prepare,因为不需要准备任何东西。

解决方案:

$query = $con->query("SELECT id,name,username,password FROM userinfo ORDER BY id DESC");
try {
   $query->execute();
   $query->bindColumn(1, $id);
   $query->bindColumn(2, $name); 
   $query->bindColumn(3, $username); 
   $query->bindColumn(4, $password); 
}
catch (PDOException $ex) {
   error_log(print_r($ex,true);
}

或者:

PDO::query() 的一个很好的特性是它使您能够遍历成功执行的 SELECT 语句返回的行集。 From the manual

foreach ($conn->query('SELECT id,name,username,password FROM userinfo ORDER BY id DESC') as $row) {
    print $row['id'] . " is the ID\n";
    print $row['name'] . " is the Name\n";
    print $row['username'] . " is the Username\n";
}

另见:

Mzea 对他们的回答有一些很好的提示,您应该使用他们的$options 设置以及他们建议的utf8mb4 连接字符集。

而且他们对使用-&gt;fetchAll 的建议也完全有效。

【讨论】:

    【解决方案2】:

    试试这个

    $dsn = "mysql:host=localhost;dbname=myDatabase;charset=utf8mb4";
    $options = [
      PDO::ATTR_EMULATE_PREPARES   => false, // turn off emulation mode for "real" prepared statements
      PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, //turn on errors in the form of exceptions
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //make the default fetch be an associative array
    ];
    try {
      $pdo = new PDO($dsn, "username", "password", $options);
    } catch (Exception $e) {
      error_log($e->getMessage());
      exit('Something weird happened'); //something a user can understand
    }
    
    $arr = $pdo->query("SELECT * FROM myTable")->fetchAll(PDO::FETCH_ASSOC);
    

    【讨论】:

    • 这里有一些好的建议。如果您可以添加一些文字来稍微解释一下,那就太好了。
    猜你喜欢
    • 2019-12-09
    • 2015-01-25
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多