php - 打印 id 一次 PHP PDO

标签 php mysql pdo

我有这段代码 php/pdo,它工作正常

$id = (int)$_GET['id'];
$place = $DB_con->prepare("SELECT * FROM `post` WHERE `category`=".$id."");
$place->execute();

foreach ($place->fetchAll() as $rawp){
   $mains = $DB_con->prepare("SELECT * FROM `place` WHERE `id`=".$rawp['placeid']."");
   $mains->execute();

   foreach ($mains->fetchAll() as $rawps){
      echo $rawps['id'].'<br/>';
   }
}

代码的结果是这样的

113
114
125
122
122
127
127

我的问题是:如何只打印一次每个地点 ID?我不想要像 ID 122 这样的重复项。

最佳答案

SQL 可以用 DISTINCT 为您做到这一点,如果您 JOIN 两个表,您只需要一个 SQL 语句,甚至不需要 选择 * 所有列,但只选择您想要的列:

$places = $DB_con->prepare("SELECT DISTINCT `place`.`id`
             FROM `post` JOIN `place` ON `post`.`placeid` = `place`.id
             WHERE `post`.`category`=:category");
$places->execute(array('category' => $_GET['id']));
foreach ($places->fetchAll() as $place) {
   echo $place['id'] . '<br />';
}

此解决方案比执行两个语句然后以编程方式减少数据的性能更高,而且最重要的是,在 WHERE 中使用变量绑定(bind)(:category)部分子句,它可以防止 SQL 注入(inject)。永远不要通过连接来自 $_GET、$_POST 或 $_REQUEST 的数据来创建 SQL 语句字符串。

关于php - 打印 id 一次 PHP PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495000/

相关文章:

php - Mysql数据库自增id不按升序自增

PHP/正则表达式 : "linkify" blog titles

mysql - 根据内容长度从具有动态列宽的mysql生成pdf

mysql - PDO 的 LastInsertID 会破坏 AWS 复制吗?

php - PHP、mySQL 和电子邮件中的字符集

php - 如果字段值=预设值,如何使用 PHP 打印 MySQL 表中的记录

MySQL 查找和替换未按预期工作(序列化数据)

php - WHERE 条件中的顺序如何影响使用 PDO::bindParam() 的查询?

php - 错误: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined NOOB

javascript - 使用 cordova/phonegap 连接到远程数据库