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

Я выполняю следующий запрос, используя 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();

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

Кто-нибудь из вас имеет представление, что нужно сделать, чтобы это исправить?
Заранее спасибо !

РЕДАКТИРОВАТЬ :
Это сопоставление, которое я использую для соответствующей таблицы:

engine=MyISAM charset=UTF8 COLLATE = utf8_general_ci;

0

Решение

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

$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';
}

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]