PDO 显示数据库中每个特定 ID 的数据

2023-12-19

如果会员登录,他们有像index.php?id=5这样的url

$id = $_GET['id']

我可以通过这样做显示用户数据

$pdo = Database::connect();
$sql = 'SELECT * FROM data WHERE id_member = "5" ORDER BY tgl DESC';                    
foreach ($pdo->query($sql) as $row) {
     echo '<td>'. $row['tgl'] . '</td>';    
}  

但如果我改变这个,什么也不会发生。

$pdo = Database::connect();
$q = $pdo->prepare('SELECT * FROM data WHERE id_member = $id ORDER BY tgl DESC');    
$q->bindValue(':id', $id, PDO::PARAM_INT);

foreach ($pdo->query($q) as $row) {
    echo '<td>'. $row['tgl'] . '</td>';
}

但我不明白。 有人可以帮我吗?请给我正确的代码并解释一下,我是 PDO 新手。

thanks


你不使用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. Prepareexecute, 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>';    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDO 显示数据库中每个特定 ID 的数据 的相关文章

随机推荐