Ошибка сортировки из-за эмуляции подготовленных операторов - PullRequest
1 голос
/ 21 сентября 2019

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1253 COLLATION 'latin1_general_cs' недопустим для 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");

Проблема в том, что я хочучтобы сделать поиск в базе данных чувствительным к регистру, а также хочу отключить эмуляцию подготовленных операторов, но как только я отключу ее, я не смогу использовать чувствительную к регистру сортировку в моем запросе выбора.

1 Ответ

0 голосов
/ 21 сентября 2019

когда я удаляю разбор, он был нечувствителен к регистру

Это утверждение о том, что необходимо доказать .Особенно, когда вы задаете вопрос о переполнении стека.

Для этого вы должны предоставить код, подтверждающий вашу точку зрения.Код, подобный этому.

<?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, а этот метод называется отладки .Это поможет вам обосновать свои выводы не на случайных мыслях, а на достоверных фактах .

Каждый раз, когда у вас возникает мысль, что какой-то ваш код не работает должным образом, вы должны написатькод, чтобы либо доказать или опровергнуть понятие.В случае, если это опровергнуто, ваша проблема решена.В случае, если это доказано, у вас есть готовый код для предоставления вместе с вопросом о переполнении стека, чтобы сделать его по теме .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...