PHP MySQL:从数据库查询数据
简介:在本教程中,您将学习如何使用PHP PDO从MySQL数据库查询数据。
您还将学习如何使用PDO准备好的语句安全地选择数据。
PHP MySQL使用简单的SELECT语句查询数据
要从MySQL数据库查询数据,请按照以下步骤操作:
首先,连接到MySQL数据库。
查看使用PDO教程连接到MySQL数据库的详细信息。
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
然后,构造一个SELECT语句,并使用PDO对象的query()方法执行它。
$sql = 'SELECT lastname, firstname, jobtitle FROM employees ORDER BY lastname'; $q = $pdo->query($sql);
PDO对象的query()方法返回PDOStatement对象,如果失败,则返回false。
接下来,使用setFetchMode()方法为PDOStatement对象设置PDO :: FETCH_ASSOC提取模式。
PDO :: FETCH_ASSOC模式指示fetch()方法返回结果集,该结果集是按列名索引的数组。
$q->setFetchMode(PDO::FETCH_ASSOC);
之后,使用PDOStatement对象的fetch()方法从结果集中获取每一行,直到没有剩余的行。
全部放在一起。
<?php require_once 'dbconfig.php'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $sql = 'SELECT lastname, firstname, jobtitle FROM employees ORDER BY lastname'; $q = $pdo->query($sql); $q->setFetchMode(PDO::FETCH_ASSOC); } catch (PDOException $e) { die("Could not connect to the database $dbname :" . $e->getMessage()); } ?> <!DOCTYPE html> <html> <head> <title>PHP MySQL Query Data Demo</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/style.css" rel="stylesheet"> </head> <body> <div id="container"> <h1>Employees</h1> <table class="table table-bordered table-condensed"> <thead> <tr> <th>First Name</th> <th>Last Name</th> <th>Job Title</th> </tr> </thead> <tbody> <?php while ($row = $q->fetch()): ?> <tr> <td><?php echo htmlspecialchars($row['lastname']) ?></td> <td><?php echo htmlspecialchars($row['firstname']); ?></td> <td><?php echo htmlspecialchars($row['jobtitle']); ?></td> </tr> <?php endwhile; ?> </tbody> </table> </body> </div> </html>
PHP MySQL使用PDO准备的语句查询数据
实际上,我们经常将参数从PHP传递到SQL语句,例如,获取姓氏以son结尾的员工。
为了安全地执行此操作并避免SQL注入攻击,您需要使用PDO准备好的语句。
让我们看一下以下示例:
<?php require_once 'dbconfig.php'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $sql = 'SELECT lastname, firstname, jobtitle FROM employees WHERE lastname LIKE ?'; $q = $pdo->prepare($sql); $q->execute(['%son']); $q->setFetchMode(PDO::FETCH_ASSOC); while ($r = $q->fetch()) { echo sprintf('%s <br/>', $r['lastname']); } } catch (PDOException $pe) { die("Could not connect to the database $dbname :" . $pe->getMessage()); }
脚本的工作方式。
首先,我们在SELECT语句中使用问号(?)。
PDO将用相应的参数替换查询中的问号。
问号称为位置占位符。接下来,我们调用PDO对象的prepare()方法来准备要执行的SQL语句。
然后,我们通过调用PDOStatement对象的execute()方法执行该语句。
此外,我们将参数作为数组传递以替换SELECT语句中的占位符。
这样,SELECT语句将被翻译为以下内容:
SELECT lastname, firstname, jobtitle FROM employees WHERE lastname LIKE '%son';
之后,我们为PDOStatement对象设置获取模式。
最后,我们获取结果集的每一行并显示姓氏字段。
PHP为您提供了另一种在准备好的语句中使用占位符的方式,称为命名占位符。
使用命名占位符的优点是:
更具描述性。
如果SQL语句具有多个占位符,则将参数传递给execute()方法更容易。
让我们看一下以下示例:
<?php require_once 'dbconfig.php'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $sql = 'SELECT lastname, firstname, jobtitle FROM employees WHERE lastname LIKE :lname OR firstname LIKE :fname;'; // prepare statement for execution $q = $pdo->prepare($sql); // pass values to the query and execute it $q->execute([':fname' => 'Le%', ':lname' => '%son']); $q->setFetchMode(PDO::FETCH_ASSOC); // print out the result set while ($r = $q->fetch()) { echo sprintf('%s <br/>', $r['lastname']); } } catch (PDOException $e) { die("Could not connect to the database $dbname :" . $e->getMessage()); }
:lname和:fname是命名的占位符。
它们被传递给execute方法的关联数组中的相应参数替换。
在本教程中,您学习了如何使用PDO对象从MySQL数据库查询数据。