有效查询使用PDO和MySQLi返回NULL

时间:2018-07-11 21:40:41

标签: php mysql pdo

我有一个非常奇怪的问题,我认为这一定是某个地方的某个库中的错误,但是为了我的生命,我无法弄清楚它的位置以便将错误报告保存在适当的位置

我正在编写一些代码来访问由kodi应用程序创建的mysql数据库

我正在尝试在该数据库中搜索文件名。

某些文件名包含奇怪的字符。

考虑以下代码(基于PDO,我也使用MYSQLi编写了相同的结果)

$filename = $conn->quote('Aliens.1986.[1080p|1.85|H.264]-YIFY.mp4');
$sql = "SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename=".$filename;
$statement = $conn->query($sql);
var_dump($statement);
var_dump($statement->fetch());

$filename=$conn->quote('Alien.3.1992.[720p|2.39|H.264]-YIFY.mp4');
$sql = "SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename=".$filename;
$statement = $conn->query($sql);
var_dump($statement);
var_dump($statement->fetch());

此代码返回;

object(PDOStatement)#2 (1) {
["queryString"]=>
string(132) "SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename='Aliens.1986.[1080p|1.85|H.264]-YIFY.mp4'"
}
array(2) {
["idMovie"]=>
string(3) "185"
[0]=>
string(3) "185"
}
object(PDOStatement)#3 (1) {
["queryString"]=>
string(132) "SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename='Alien³.1992.[720p|2.39|H.264]-YIFY.mp4'"}
bool(false)

您可以看到第二个查询返回false。但是,如果我从该查询中获取sql并将其直接粘贴到mysql中,它将返回正确的值;

mysql> SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename='Alien³.1992.[720p|2.39|H.264]-YIFY.mp4';
+---------+
| idMovie |
+---------+
|    5151 |
+---------+
1 row in set (0.01 sec)

我也试图像这样逃避上标3; 《外星人》 \ .1992,表现出完全相同的行为,确实让我感到难过。

如果我将文件名更改为Alien.3,它将按预期工作,因此它确实与上标字符3有关

如果有人可以解释这里发生的事情,我将不胜感激

编辑:

这是最终成功的代码;

$filename = 'Alien³.1992.[720p|2.39|H.264]-YIFY.mp4';
$statement = $conn->prepare("SELECT m.idMovie FROM movie m LEFT JOIN files f ON m.idFile = f.idFile WHERE f.strFilename = ?");
var_dump($statement->execute(array($filename)));
var_dump($statement->fetchAll(PDO::FETCH_ASSOC));

谢谢大家!

0 个答案:

没有答案