我使用以下查询从PDO中选择mysql数据库中的行。
我正在使用此代码选择多行:
<?php
$contact = $pdo_conn->prepare("SELECT * from contacts WHERE company_sequence = :company_sequence AND contactstatus = :contactstatus ");
$contact->execute(array(':contactstatus' => '', ':company_sequence' => $ticket["company"]));
?>
<select name="contactsequence" id="contactsequence">
<?php foreach($contact as $contacts) {
echo '<option value="'.$contacts["sequence"].'" ';
if($ticket["contact"] == $contacts["sequence"]) {
echo 'selected="selected"';
}
echo '>'.$contacts['forename'].' '.$contacts["surname"].'</option>';
}
?>
</select>
这是选择一行:
$stmt = $pdo_conn->prepare("select * from tickets where ticketnumber = :seq ");
$stmt->execute(array(':seq' => $_GET["seq"]));
$ticket = $stmt->fetch();
运行PDO选择查询的正确方法是什么? (防止sql注入等)我一直在网上看,但我只想仔细检查
答案 0 :(得分:1)
查理,
由于某些原因,您可以转换为此位代码。答:可读。 B:错误检查
如果你传递一个空的结果集,你的foreach(...)将抛出一个错误。 foreach
相信你正在为它提供合法的阵列。
$query = "SELECT *
FROM `contacts`
WHERE `company_sequence` = :companySequence AND
`contactstatus` = :contactStatus";
$stmt = $pdo_conn->prepare($query);
$stmt->execute(array(
':contactStatus' => '',
':companySequence' => $ticket["company"])
);
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!$records) {
// NO RECORDS FOUND
die('No records found.');
}
foreach ($records as $contact) {
// Do what you want with each result
}
这是一种更简洁的方法,可以提供一些非常小的错误/没有找到结果。
答案 1 :(得分:1)
你这样做的方式是正确的,虽然我更喜欢将我的数据库内容与html输出内容分开。
您不必获取大结果集中的所有行,并且可以直接在$contact
对象上循环,因为PDOStatement
对象实现了Traversable
,使其适合循环使用foreach
循环。
我建议的一件事是添加错误处理。使用例外,您可以将数据库调用放在try
- catch
块中,以便在出现问题时轻松检测并采取措施。