我有一个网站从网址读取位置并在该位置运行数据库查询。对于大多数位置而言,这不会导致问题,但是搜索失败的位置很少。这些位置在位置名称中都包含一个或多个连字符,但是有大量此类位置带有连字符。
调查问题我发现了一些非常令人惊讶的事情,首先如果我从命令行或sqlite管理器运行查询,查询将返回正确的行,但如果我通过PDO运行查询,则不会返回任何结果。即使我用LIKE' w%'运行了类似的查询。它仍然无法返回具有正确值的行(尽管将返回许多其他行。
$db = new PDO($connectionString);
$query = "SELECT name, page FROM stations WHERE page = 'warragul-(nilma-north)'";
$sql = $db->prepare($query);
if (!$sql) {
$error = $db->errorInfo();
throw new Exception($error[2], $error[1]);
}
$sql->execute();
$result = $sql->fetchAll();
我尝试了什么
我尝试了一些基本的东西,比如使用不同的引号,绑定参数。 其次我尝试查看我的php和数据库中的十六进制值,但返回相同的值:77 61 72 72 61 67 75 6C 2D 28 6E 69 6C 6D 61 2D 6E 6F 72 74 68 29。 其中2D是破折号值。我检查了这个2D值对另一行没有这个问题,它之前也使用过2D。我扩展了搜索范围,并在页面字段中找到了一些不会返回任何类型文本搜索值的行,例如: 香蕉银行 larapuna-(埃迪斯通点) 港口肯布拉,海港 除连字符外,我找不到它们之间的任何模式。 一些有用的例子是: 朱莉娅 - 小溪 挂载诺瓦 - 诺瓦 ST-圣基尔达海-rmys
理想情况下,我想了解这个问题及其原因。但我会解决任何阻止此行为的解决方案,并返回包含结果的行。
注意:此表及其所有行似乎没有任何问题,除非在运行此查询时,这是在where子句中使用页面的唯一查询。
编辑:我尝试在SQLite3库中运行相同的逻辑,它具有完全相同的行为。编辑:对此问题的假设不正确,PDO连接到错误的数据库导致此问题。见下面的答案。
答案 0 :(得分:0)
对不起,这个问题是基于错误的假设。
传递的连接字符串指的是数据库的旧版本,类似于大多数位置未受影响但不完全相同导致某些位置出现问题。更正正在传递的连接字符串的值似乎解决了问题。