PHP-PDO try/catch插入动态html链接
在我第一次尝试使用PDO和准备好的语句时,似乎遇到了一个小问题。基本上,我是在一个个人资料页,其中包括一个收件箱的工作。我正在使用try/catch生成收件箱:PHP-PDO try/catch插入动态html链接,php,mysql,pdo,try-catch,prepared-statement,Php,Mysql,Pdo,Try Catch,Prepared Statement,在我第一次尝试使用PDO和准备好的语句时,似乎遇到了一个小问题。基本上,我是在一个个人资料页,其中包括一个收件箱的工作。我正在使用try/catch生成收件箱: <?php $sqlin = $db->prepare("SELECT * FROM message WHERE recipientID = (SELECT id FROM members WHERE username = '$pageowner')"); try { while($row = $sqlin->
<?php
$sqlin = $db->prepare("SELECT * FROM message WHERE recipientID = (SELECT id FROM members WHERE username = '$pageowner')");
try {
while($row = $sqlin->fetch(PDO::FETCH_ASSOC)){
?>
<br><a href="inbox.php?id=<?php echo $row['idmessage'] ?>"><?php echo $row['title'] ?></a>
<?php
}
}
catch(PDOException $e) {
die ($e->getMessage());
}
?>
因此,应该将用户id与收件人id关联起来,然后创建到消息的链接。在浏览器中运行时,不会列出任何链接
这是我的try/catch语法中的一个问题吗?可能是停止php并插入html?-我尝试了回显,但在创建代码时遇到了问题。您必须在准备之前和之后开始尝试/捕获异常。并且请使用准备好的语句,带有准备方法。否则,直接将变量放在查询中会破坏PDO的用途。这不会使您的脚本在mysql注入中更安全
$pageOwner = 'some external data';
try {
$sqlin = $db->prepare("
SELECT * FROM message
WHERE recipientID = (
SELECT id
FROM members
WHERE username = ?
)
");
$sqlin->execute(array($pageOwner));
}catch(PDOException $e){
die ($e->getMessage());
}
while($row = $sqlin->fetch(PDO::FETCH_ASSOC)){
?>
<br><a href="inbox.php?id=<?= $row['idmessage'] ?>"><?= $row['title'] ?></a>
<?php } ?>
首先,你根本不应该用try..catch
相反,您必须调用execute并使用prepared语句。
此外,还必须将SQL与HTML分开。
这是正确的代码
<?php
$sql = "SELECT m.* FROM message m, members mm WHERE recipientID = mm.id and username = ?";
$stm = $db->prepare($sql);
$stm->execute([$pageowner]);
$data = $stm->fetchAll();
?>
<?php foreach ($data as $row): ?>
<br><a href="inbox.php?id=<?=$row['idmessage'] ?>"><?=$row['title'] ?></a>
<?php endforeach ?>
@兰博拉莫斯没问题。如果你发现这个答案是有用的,请考虑接受它。你的实现是错误的。fetchAll返回多维数组,因此,foreach$数据作为$row$row[]返回。。无法提取结果。而且,我看不出任何理由,为什么OP不应该使用try/catch