gpt4 book ai didi

php - 确定为什么相同的查询在 phpMyAdmin 中返回结果,但在 PHP 中运行时却不然

转载 作者:行者123 更新时间:2023-11-29 16:22:54 25 4
gpt4 key购买 nike

当前的问题是,以下 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 设置为“SET NAMES 'latin1' COLLATION '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 的新手,可能做错了一些事情,欢迎任何意见。

最佳答案

我建议使用bindParam,您可以在php manual中阅读更多相关信息。下面的评论中有一些非常好的例子。

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

$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();

关于php - 确定为什么相同的查询在 phpMyAdmin 中返回结果,但在 PHP 中运行时却不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54440685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com