【问题标题】:Translation of PHP example code from mysqli to PDOPHP 示例代码从 mysqli 到 PDO 的翻译
【发布时间】:2017-08-31 00:01:22
【问题描述】:

我希望有人愿意在这里帮助我——因为我知道这应该不会太难。

我找到了我想做的事情的教程示例。不幸的是,示例代码使用了旧的 MYSQLi,我不知道如何将其更改为 PDO。

Here is a link to the full tutorial

 $connect = mysqli_connect("localhost", "root", "", "testing");  
 $query = "SELECT * FROM tbl_employee ORDER BY id desc";  
 $result = mysqli_query($connect, $query);

然后再往下:

       <div class="container" style="width:800px;">  
            <h2 align="center">PHP AJAX Jquery - Load Dynamic Content in Bootstrap Popover</h2>  
            <h3 align="center">Employee Data</h3>                 
            <br /><br />  
            <div class="table-responsive">  
                 <table class="table table-bordered">  
                      <tr>  
                           <th width="20%">ID</th>  
                           <th width="80%">Name</th>  
                      </tr>  
                      <?php  
                      while($row = mysqli_fetch_array($result))  
                      {  
                      ?>  
                      <tr>  
                           <td><?php echo $row["id"]; ?></td>  
                           <td><a href="#" class="hover" id="<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></a></td>  
                      </tr>  
                      <?php  
                      }  
                      ?>  
                 </table>  
            </div>  
       </div>  

【问题讨论】:

  • 而mysqli什么时候被称为旧的??也许我没有收到备忘录
  • - 可能的重复是我想要的相反角色。那是 PDO 到 mysqli - 我想要 mysqli 到 PDO。谢谢
  • @Wojtek T...我的错!我将它与它的前身 mysql 混淆了......实际上 mysqli 是它的替代品,但我更喜欢习惯 PDO,因为 MySQLi 只支持 MySQL DB 的驱动程序,而 PDO 则为多个数据库提供支持驱动程序。

标签: php mysql html pdo


【解决方案1】:

这就是您在 PDO 中执行此查询的方式

数据库连接:

$host = 'localhost';
$db   = '';
$user = '';
$pass = '';
$charset = 'utf8';

$dsn = "mysql:host={$host};dbname={$db};charset={$charset}";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);

请注意,我们在这里设置了一些额外的参数,即ATTR_EMULATE_PREPARES,这使得 PDO 可以执行正确的准备语句而不是模拟语句,从而使其更安全。 (如果我们不这样做,它基本上和字符串连接一样安全)注意,在您编写的查询中,这实际上并不重要,因为没有什么要准备的,但是稍后当您有一些语句需要传递数据。

查询:

$stmt = $pdo->query("SELECT * FROM tbl_employee ORDER BY id desc")->fetchAll();

循环:

if(!empty($stmt)) {
    foreach($stmt as $row) {  
        ?>  
            <tr>  
               <td><?php echo $row["id"]; ?></td>  
               <td><a href="#" class="hover" id="<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></a></td>  
            </tr>
        <?
    }
} else {
    //show error, no results
}

我想提一下MySQLi_* 接口并不是真正的“旧”,它还没有被弃用或未使用。我更喜欢 PDO 而不是 MySQLi,因为它对我来说似乎更容易,但两种语法都是完全有效的并受支持。当您不使用任一接口使用Prepared Statements 时,就会出现问题。

【讨论】:

  • 您不应该检查查询中的数组是否为空。因为如果它是空的,它会抛出错误
  • @GrumpyCrouton 非常感谢!使用你的代码我得到它输出 1 2 8 这是我在数据库中的三个条目。
  • 太棒了@francoiscx!多亏了你,我刚刚通过了 2k 代表 ^.^ 干杯!
  • @francoiscx 如果你有兴趣,我写了一个函数让 PDO 查询变得非常容易,你可以check that out here。它基本上只是一个包装函数,您传递查询和值,它会自动执行正确的过程。
  • @GrumpyCrouton - 为你的 2k 代表干杯!并感谢您提供更多信息。我会在早上大脑新鲜时检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多