【问题标题】:Fetching query in PHP PDO在 PHP PDO 中获取查询
【发布时间】:2016-08-31 22:45:08
【问题描述】:

我有这个 php 代码,

$result = $Db->query("SELECT DISTINCT matkul_mahasiswa.nim, matkul_mahasiswa.kode_matkul, 
                      nilai.nim, nilai.kode_matkul, nilai.nilai, nilai.kode_ta, nilai.status_nl
                      FROM matkul_mahasiswa 
                      JOIN nilai
                        ON matkul_mahasiswa.nim = nilai.nim AND matkul_mahasiswa.kode_matkul = nilai.kode_matkul
                     WHERE nilai.kode_matkul = '$kdmk' AND nilai.status_nl = '1' AND nilai.kode_ta = '$kdta'");

然后我尝试使用 PDO 获取它,并回显结果

$data = $result->fetch(PDO::FETCH_ASSOC);

echo $data['nim']; 
echo $data['nilai'];

但是什么都没有,什么都没有出现。 我在phpmyadmin上试过查询,效果很好

那么,怎么了?我在这里想念什么?

感谢 b4。

【问题讨论】:

  • Var 转储整个 $data 变量。您的字段名称可能与您预期的不同。老实说,你是唯一可以通过调试自己的代码来回答这个问题的人......
  • 是的,我这样做了,结果是“bool(false)”,这意味着查询不起作用..但它适用于 phpmyadmin。我实际上想做完全外连接,但这是错误的,所以我修改了它并最终工作,然后当我将查询放在 php 上时发生这种情况......
  • 惊喜,惊喜 - 如果有任何与 sql 相关的错误,您可以使用 pdo 检查...
  • 设置 PDO 以抛出异常,然后你就会知道错误是什么~$Db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)。您还应该在开发时显示所有错误~error_reporting(E_ALL); ini_set('display_errors', 'On');
  • 另外,您应该使用准备好的语句并绑定 $kdmk$kdta

标签: php mysql sql pdo


【解决方案1】:

试试这个(我改变了一点你的方法并添加了准备好的语句,因为你只是要求 SQL 注入)。

$stmt= $Db->prepare("SELECT DISTINCT matkul_mahasiswa.nim AS matkul_mahasiswa_nim, matkul_mahasiswa.kode_matkul, nilai.kode_matkul, nilai.nilai, nilai.kode_ta, nilai.status_nl FROM matkul_mahasiswa JOIN nilai ON matkul_mahasiswa.nim = nilai.nim AND matkul_mahasiswa.kode_matkul = nilai.kode_matkul WHERE nilai.kode_matkul = :kdmk AND nilai.status_nl = '1' AND nilai.kode_ta = :kdta");
$stmt->bindValue(':kdmk', $kdmk);    
$stmt->bindValue(':kdta', $kdta);
$stmt->execute();

while($row = $stmt->fetch()) 
{
    $out[] = $row;
}

return $out;

【讨论】:

  • 可以更方便地使用$out = $stmt->fetchAll(PDO::FETCH_ASSOC)
  • 我知道 :) 我更喜欢这种方式,因为它提供了一个模板,可以在创建输出之前对结果进行一些操作。你的方式当然也是有效的。
  • 修复重复的nim 结果列,您将在这里得到有效的答案:)
  • 我给了nim 2 个不同的别名,导致不确定它在具有不同上下文的 2 个表中是重复的还是相同的列名。
  • 嗯,乍一看,它们似乎是相同的值(两个表中的外键引用),所以实际上没有必要从两者中进行选择,因为它们是相同的
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2016-10-06
  • 2015-04-26
  • 2012-08-14
  • 1970-01-01
  • 2012-10-17
  • 2021-03-25
相关资源
最近更新 更多