你不使用query
功能,http://php.net/manual/en/pdo.query.php http://php.net/manual/en/pdo.query.php, with prepare
, http://php.net/manual/en/pdo.prepare.php http://php.net/manual/en/pdo.prepare.php. Prepare
与execute
, http://php.net/manual/en/pdostatement.execute.php http://php.net/manual/en/pdostatement.execute.php。您还需要将绑定名称放入查询中。
$pdo = Database::connect();
$q = $pdo->prepare('SELECT * FROM data WHERE id_member = :id ORDER BY tgl DESC');
$q->bindValue(':id', $id, PDO::PARAM_INT);
$q->execute();
while($q->fetch(PDO::FETCH_ASSOC)) {
echo '<td>'. $row['tgl'] . '</td>';
}
or
$pdo = Database::connect();
$q = $pdo->prepare('SELECT * FROM data WHERE id_member = ? ORDER BY tgl DESC');
$q->execute(array($id));
while($q->fetch(PDO::FETCH_ASSOC)) {
echo '<td>'. $row['tgl'] . '</td>';
}
两种方法都是准备好的语句。它们分离用户的数据,因此不会导致您的查询出现问题。
另外,正如其他答案所提到的,如果您使用双引号,您的第二个查询将会执行......但不要这样做,它会让您面临注入。这是你可以做到的方法,但有准备的会更好。还要注意铸造$id
到一个 int ,强制它成为一个数字。
$id = (int)$_GET['id'];
$pdo = Database::connect();
$sql = "SELECT * FROM data WHERE id_member = $id ORDER BY tgl DESC";
foreach ($pdo->query($sql) as $row) {
echo '<td>'. $row['tgl'] . '</td>';
}