将PHP示例代码从mysqli转换为PDO

时间:2017-08-30 15:47:01

标签: php mysql html5 pdo

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

我发现并教导了我想做的事情的例子。不幸的是,示例代码使用了旧的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>  

1 个答案:

答案 0 :(得分:3)

这是您在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_*界面并不是真的&#34;旧&#34;,它到目前为止还没有被弃用或未使用过。我更喜欢PDO而不是MySQLi,因为它对我来说似乎更容易,但两种语法都是完全有效和支持的。当您未使用任何接口Prepared Statements时,会出现问题。