gpt4 book ai didi

php - 由于模拟准备好的语句已关闭而导致排序错误

转载 作者:行者123 更新时间:2023-11-29 15:37:56 25 4
gpt4 key购买 nike

SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'latin1_general_cs' is not valid for CHARACTER SET 'binary'

当我将此行添加到连接到数据库时使用的选项数组时,会弹出此错误

PDO::ATTR_EMULATE_PREPARES   => false

最终当我从这一行删除这部分COLLATE latin1_general_cs时它就消失了

$select = $conn->prepare("SELECT * FROM users_data WHERE email = :email COLLATE latin1_general_cs");

问题是我想在数据库中进行搜索区分大小写,并且还想关闭准备语句的模拟,但是一旦将其关闭,我就无法在选择查询中使用区分大小写的排序规则。

最佳答案

when I remove the collate it was case insensitive

这是一个需要得到证明的说法。特别是当您在 Stack Overflow 上提出问题时。

为此,您必须提供一个代码来证明您的观点。像这样的代码。

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

$user = 'root';
$pass = '';
$dsn = 'mysql:charset=utf8;dbname=test;host=localhost;charset=utf8';
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
);
$db =$pdo = new PDO($dsn, $user, $pass, $opt);

$db->query("create temporary table tr (t varchar(20) character set binary)");
$db->query("insert into tr values ('aaa')");
$stmt = $db->prepare("SELECT t from tr where t=?");
$stmt->execute(['AAA']);
var_dump($stmt->fetchColumn());

显然,此代码返回false

这段代码叫做MCVE,这个方法叫做debugging 。它可以帮助您的结论不是基于随意的想法,而是基于可靠的事实

每当您发现某些代码无法按预期工作时,您就必须编写代码来证明或反驳该想法。如果它被反驳,你的问题就解决了。如果这一点得到证实,您可以在 Stack Overflow 上提供现成的代码以及您的问题,以使其切合主题

关于php - 由于模拟准备好的语句已关闭而导致排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038424/

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