valid查询使用pdo和mysqli返回null

elcex8rz  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(224)

我有一个非常奇怪的问题,我想一定是某个图书馆的某个地方有一个bug,但就我的一生而言,我无法找出它在哪里,以便在适当的地方提交bug报告
我正在编写一些代码来访问由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));

谢谢大家!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题