当前位置: 首页 > 知识库问答 >
问题:

标识为什么相同的查询在phpMyAdmin中返回结果,但在PHP中运行时不返回结果

闻飞跃
2023-03-14

当前的问题是,以下SQL查询在通过phpMyAdmin SQL页面运行时查找并返回结果,但在使用PDO通过PHP脚本运行时不返回任何结果。(如未找到匹配结果)

有问题的查询:

SELECT `p_id` FROM `p_desc` WHERE `lang_id` = 1 AND (`p_name` LIKE '%nål%' OR `p_desc` LIKE '%nål%')

我怀疑这与排序规则或正在使用的字符集有关,因为不使用任何特殊字符会得到预期的结果。

数据库使用的是latin1_swedish_ci排序规则。我尝试将pdo::mysql_attr_init_command设置为“设置名称'latin1'排序规则'latin1_swedish_ci'”,还尝试使用utf8或utf8mb4以及utf8_unicode_ci等。

PDO创建:

$dsn = "mysql:host=" . self::$serverHost . 
          ";dbname=" . self::$databaseName . 
         ";charset=" . self::$charset;

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'' . self::$charset . '\'  COLLATE \'' . self::$collation . '\'',
];
$connection = new PDO($dsn, self::$username, self::$password, $options);

在这里执行查询:

$conn = Database::getConnection();
$stmt = $conn->prepare('SELECT `p_id` FROM `p_desc` WHERE `lang_id` = ' . $langID . ' AND (`p_name` LIKE \'%' . $searchText . '%\' OR `p_desc` LIKE \'%' . $searchText . '%\')');
$stmt->execute();
$matchingIDs = $stmt->fetchAll();

如上所述,在phpMyAdmin中运行查询按预期返回匹配结果,但在PHP脚本中运行查询没有返回匹配结果。

不会生成任何错误消息。
查询相同。

请记住,我是PHP和MySQL的新手,可能做了一些错误的事情,任何输入都是非常感谢的。

共有1个答案

赏夕
2023-03-14

我建议使用bindParam,您可以在php手册中阅读更多关于这方面的内容,并在下面的注释中看到一些非常好的示例。

关于上面的脚本,您可以尝试以下操作:

$conn = Database::getConnection();

$stmt = $conn->prepare('SELECT `p_id` FROM `p_desc` WHERE `lang_id` = :langID AND (`p_name` LIKE :searchText1 OR `p_desc` LIKE :searchText2)');

$stmt->bindParam(':langID', $langID);
$stmt->bindParam(':searchText1', '%' . $searchText . '%');
$stmt->bindParam(':searchText2', '%' . $searchText . '%');

$stmt->execute();
$matchingIDs = $stmt->fetchAll();
 类似资料:
  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 问题内容: 我有一堆应聘者,他们有一些或多个工作,每个人都在公司工作,并且使用了一些技能。 坏的ascii艺术如下: 这是我的数据库: 。 。 。 。 这是我对查询的尝试(请注意,我打算将通配符更改为字段名称;我只是想使某些功能生效): HediSql说 查询出了什么问题?我希望从不良的ascii艺术中可以清楚地知道我要达到的目标。 (此外,它对我连接表的顺序是否有任何速度差异?我将担心新的MyS

  • 我有以下表格结构: 1-课程(course_id、course_nam、语言、course_price、create_date、average_rating、course_description、certifica_price、course_creator_id) 2-学生(学生证、钱包) 3-折扣(折扣id、折扣课程id、允许的许可课程id、开始日期、结束日期、百分比) 4-报名(student

  • 我有下面的SQL查询,我在flink工作中使用。< code>mysql_table是使用JDBC连接器创建的,而< code>kafa_source表是从传入的kafka流创建的。 我在两者之间执行时态连接,当我在Flink的sql-client CLI中检查时,运行良好(用< code>flink-faker测试)。内部查询工作得非常好,并且正在打印结果。有人能帮助我找出这个问题吗? 编辑:我

  • 我正在查询SQL数据库,但由于某些原因,结果项会随机返回。这是我的密码: searchFriendEmailArrayNew是一个电子邮件地址数组,因此当我查询数据库表时,它会使用电子邮件来查找该用户。数组始终保持一致且顺序相同: user1@email.com 查询总是按照这个顺序进行的。 然后,我查询用户的所选字段,在本例中,我查询的是“isriding”字段。此字段是返回true或false

  • 当我执行普通Select时,返回正确的结果,但当我执行Select for DB uptime时,它始终返回相同的第一个结果。我确实检查了Postgres日志,我看到select被执行了。