Результаты различных запросов PHP - MySQL Workbench vs Выполнение PHP

0

Я использую следующий запрос с использованием Workbench MySQL, и я получаю точные результаты из базы данных:

SELECT * 
FROM ODB_RG 
WHERE fullAddressV1 = 'רמת גן חרושת 1' 
    OR fullAddressV2 = 'רמת גן חרושת 1' 
    OR fullAddressV3 = 'רמת גן חרושת 1' 
    OR fullAddressV4 = 'רמת גן חרושת 1'

С другой стороны, запуск следующего кода php, который фактически сгенерировал эквивалентный запрос к упомянутому выше, не возвращает никакой записи:

$fullAddress = "1 רמת גן חרושת";
$stmt = $con->prepare("SELECT * FROM ODB_RG WHERE fullAddressV1 = :address1 "
        . "OR fullAddressV2 = :address2 OR fullAddressV3 = :address3 "
        . "OR fullAddressV4 = :address4");

$stmt->bindParam(':address1',$fullAddress);
$stmt->bindParam(':address2',$fullAddress);
$stmt->bindParam(':address3',$fullAddress);
$stmt->bindParam(':address4',$fullAddress);

$status = $stmt->execute();

Единственной разумной причиной, которая может привести к разнице между решением, является ивритская строка, которая передается в качестве параметра.

У любого из вас есть идея, что нужно сделать, чтобы исправить это? Заранее спасибо !

EDIT: Это сопоставление, которое я использую для соответствующей таблицы:

engine=MyISAM charset=UTF8 COLLATE = utf8_general_ci;
  • 0
    Какой порядок сортировки использует ваша база данных / таблицы / столбцы? Используйте UTF8, если вы не уверены.
  • 0
    Поддерживает ли ваша конфигурация набор символов, который вы пытаетесь использовать?
Показать ещё 12 комментариев
Теги:
mysql-workbench
pdo

1 ответ

1

Это то, что я имел в виду при проверке ошибок:

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$fullAddress = "1 רמת גן חרושת";
$stmt = $con->prepare("SELECT * FROM ODB_RG WHERE fullAddressV1 = :address1 "
        . "OR fullAddressV2 = :address2 OR fullAddressV3 = :address3 "
        . "OR fullAddressV4 = :address4");

if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($con->errorInfo());
    die();
}

$stmt->bindParam(':address1',$fullAddress);
$stmt->bindParam(':address2',$fullAddress);
$stmt->bindParam(':address3',$fullAddress);
$stmt->bindParam(':address4',$fullAddress);

$status = $stmt->execute();

if (!$status ) {
    echo "\nPDO::errorInfo():\n";
    print_r($con->errorInfo());
    die();
}
if($row = $stmt->fetch()){
   var_dump($row);
}else{
   echo 'no row found';
}

Я знаю его ulgy, иногда называемый защитным программированием, но он позволяет вам знать, что происходит.

  • 0
    Прежде всего, спасибо за ответ. Я проверил это, без ошибок и без результатов.
  • 0
    @Itamar попробуйте жестко закодировать значения в строку напрямую
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню