在phppdo中获取查询
我有这个php代码在phppdo中获取查询,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我有这个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
$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。试试这个(我稍微改变了你的方法,添加了准备好的语句,因为你只是要求SQL注入)
试试这个(我稍微改变了你的方法,添加了预处理语句,因为你只是要求SQL注入)
Var转储整个$data变量。您可能有不同于预期的字段名。老实说,你是唯一一个可以通过调试自己的代码来回答这个问题的人……是的,我这样做了,结果是“bool(false)”,这意味着查询不起作用。。但它对phpmyadmin有效。实际上,我想做完全的外部连接,但这是一个错误,所以我修改了它,最后在我将查询放在php上时开始工作。这种情况会发生……出乎意料,出乎意料-您可以使用pdo检查是否存在与sql相关的错误……将pdo设置为抛出异常,然后您就会知道错误是什么~
$Db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)
。在开发~错误报告(E_all)时,还应显示所有错误;ini_集('display_errors','On'))
此外,您应该使用一个准备好的语句,并绑定$kdmk
和$kdta
Var转储整个$data变量。您可能有不同于预期的字段名。老实说,您是唯一可以通过调试自己的代码来回答此问题的人……是的,我这样做了,结果是“bool(false)”,这意味着查询不起作用..但它在phpmyadmin上起作用。我实际上想进行完整的外部连接,但这是一个错误,所以我修改了它,最后在将查询放在php上时开始工作。这种情况发生了…出乎意料,出乎意料-您可以使用pdo检查是否存在任何与sql相关的错误…设置pdo以引发异常,然后您将知道错误是~$Db->setAttribute(PDO::ATTR\u ERRMODE,PDO::ERRMODE\u EXCEPTION)
。在开发~错误报告(E\u all);ini\u set('display\u errors','On')时,还应显示所有错误
另外,您应该使用一个预先准备好的语句和绑定$kdmk
和$kdta
可以更容易地使用$out=$stmt->fetchAll(PDO::FETCH_ASSOC)
我知道:)我更喜欢这种方式,因为它提供了一个模板,在创建输出之前对结果进行一些操作。你的方法当然也是有效的。修复重复的nim
result列,你会在这里得到一个有效的答案:)我给了nim
2个不同的别名,因为不确定它是重复的还是只是两个具有不同上下文的表中的相同列名。嗯,第二眼看,它们似乎是相同的值(两个表中的外键引用)因此实际上不需要从这两个表中进行选择,因为它们将是相同的,因此可以更容易地使用$out=$stmt->fetchAll(PDO::FETCH_ASSOC)
I know:)我更喜欢这种方式,因为它提供了一个模板,在创建输出之前对结果进行一些操作。你的方法当然也是有效的。修复重复的nim
result列,你会在这里得到一个有效的答案:)我给了nim
2个不同的别名,因为不确定它是重复的还是只是两个具有不同上下文的表中的相同列名。嗯,第二眼看,它们似乎是相同的值(两个表中的外键引用)因此实际上不需要从这两个表中进行选择,因为它们是相同的
$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;