【问题标题】:PHP Different Query Results - MySQL Workbench vs PHP ExecutionPHP 不同的查询结果 - MySQL Workbench 与 PHP 执行
【发布时间】:2015-02-09 04:51:08
【问题描述】:

我正在使用 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;

【问题讨论】:

  • 您的数据库/表/列使用什么排序规则?如果不确定,请使用 UTF8。
  • 您的配置是否支持您尝试使用的字符集?
  • @halfer ,请参阅编辑。
  • OT:不要重复地址字符串,你可以写WHERE :address IN (fullAddressV1, fullAddressV2, fullAddressV3, fullAddressV4)
  • @Itamar 你得到任何结果,你会做任何错误检查吗

标签: php sql pdo mysql-workbench


【解决方案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';
}

我知道它的丑陋,有时称为防御性编程,但它让你知道发生了什么。

【讨论】:

  • 首先,感谢您的回答。我已经检查过了,没有错误,也没有结果。
  • @Itamar 尝试将值直接硬编码到字符串中
  • 也试过了,还是没有结果。快把我逼疯了
  • @Itamar 除了 unicode 之外我没有看到任何其他原因,所有内容都需要 utf8 列、连接甚至 php 文件 itslef
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2010-11-12
  • 2019-03-21
  • 2015-07-12
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多