如何在PHP中使用PDO获取结果数组?
在阅读了SQL注入攻击之后,我正在编辑我的搜索脚本。我正在尝试使用PDO而不是常规的mysql连接从脚本中获得相同的功能。所以我一直在读其他关于PDO的帖子,但我不确定。这两个脚本是否提供相同的功能 对于PDO:如何在PHP中使用PDO获取结果数组?,php,mysql,pdo,Php,Mysql,Pdo,在阅读了SQL注入攻击之后,我正在编辑我的搜索脚本。我正在尝试使用PDO而不是常规的mysql连接从脚本中获得相同的功能。所以我一直在读其他关于PDO的帖子,但我不确定。这两个脚本是否提供相同的功能 对于PDO: $pdo = new PDO('mysql:host=$host; dbname=$database;', $user, $pass); $stmt = $pdo->prepare('SELECT * FROM auction WHERE name = :name'); $stm
$pdo = new PDO('mysql:host=$host; dbname=$database;', $user, $pass);
$stmt = $pdo->prepare('SELECT * FROM auction WHERE name = :name');
$stmt->bindParam(':name', $_GET['searchdivebay']);
$stmt->execute(array(':name' => $name);
对于常规mysql:
$dbhost = @mysql_connect($host, $user, $pass) or die('Unable to connect to server');
@mysql_select_db('divebay') or die('Unable to select database');
$search = $_GET['searchdivebay'];
$query = trim($search);
$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'";
if(!isset($query)){
echo 'Your search was invalid';
exit;
} //line 18
$result = mysql_query($trim);
$numrows = mysql_num_rows($result);
mysql_close($dbhost);
我继续使用常规示例
while($i < $numrows){
$row = mysql_fetch_array($result);
while($i<$numrows){
$row=mysql\u fetch\u数组($result);
从数据库中创建匹配结果数组。如何使用PDO执行此操作?查看此方法。您也可以在迭代器模式中使用
PHP文档中的fetchAll
代码示例:
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);
有三种方法可以获取PDO语句返回的多行 最简单的方法就是迭代PDO语句本身:
$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// iterating over a statement
foreach($stmt as $row) {
echo $row['name'];
}
另一种方法是在熟悉的while语句中使用fetch()方法获取行:
$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// using while
while($row = $stmt->fetch()) {
echo $row['name'];
}
但对于现代web应用程序,我们应该将datbase Iterations与输出分离,因此最方便的方法是使用fetchAll()方法一次获取所有行:
或者,如果需要先预处理某些数据,请使用while循环并手动将数据收集到数组中
$result = [];
$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// using while
while($row = $stmt->fetch()) {
$result[] = [
'newname' => $row['oldname'],
// etc
];
}
然后将其输出到模板中:
<ul>
<?php foreach($data as $row): ?>
<li><?=$row['name']?></li>
<?php endforeach ?>
</ul>
请注意,PDO支持。mysql*版本到底是如何工作的?在声明它之前,您正在使用
$query
。“常规”代码不起作用。你设置了$query
之后设置了$sql
。可能是重复的啊,是的,我测试过了,我只是把它弄糟了,复制到这里使用,但在我的真实脚本上,一切都是按顺序的。我编辑了你问题的标题,因为它与真正的问题没有什么关系,因此会产生误导。通常情况下我会对类似这样的重复问题投反对票,但我不会这么做,因为很少有人真正接受我们的建议并使用参数化查询!\PDO::FETCH_ASSOC
和\PDO::FETCH_NUM
允许您定义抓取模式。\PDO::FETCH_ASSOC
将只返回字段=>值
array,而\PDO::FETCH_NUM
只返回带有数字键的数组,而\PDO::FETCH_两者都将返回与答案相同的结果。在这种情况下,此常量应传递给->fetchAll()
方法。如果我现在只想输出它们的数组呢?我只想说让我们输出数组[0]价值观当然可以,怎么做?
$result = [];
$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// using while
while($row = $stmt->fetch()) {
$result[] = [
'newname' => $row['oldname'],
// etc
];
}
<ul>
<?php foreach($data as $row): ?>
<li><?=$row['name']?></li>
<?php endforeach ?>
</ul>