[英]mysqli giving an error when string starts with a number
我的php脚本应该可以搜索客户端数据库,并且一切正常,除非数据库中的客户端名称以数字开头(该列的格式为Varchar(255)),否则一切正常。
if(isset($_GET['search'])) {
$searchVal = "%" . $_GET['search'] . "%";
}
是我抓取它的方式,我认为值得一提,因为网站另一端的自动完成功能可以正常工作,并且它使用$ _POST发送数据(我们想使用$ _GET以便网站访问者可以导航) 。
$query = "SELECT DISTINCT clients.client_id,
clients.logoFileName,
clients.clientName,
clients.streetAddress,
clients.city,
clients.state,
clients.zip,
clients.latitude,
clients.longitude
FROM clients
INNER JOIN clientData
ON clients.client_id = clientData.client_id
WHERE clients.clientName LIKE ? AND clients.city LIKE ?
OR clientData.clientCategory LIKE ? AND clients.city LIKE ?
OR clientData.term LIKE ? AND clients.city LIKE ?";
//setup
$stmt->prepare($query);
$stmt->bind_param('ssssss',$searchVal,$cityVal,$searchVal,$cityVal,$searchVal,$cityVal);
因此,此搜索实际上可以在99%的搜索中运行(我们列出了大约1000个客户端,这仅适用于以数字开头的10个客户端)。
因此,如果我要搜索“ UPS商店1840”,则可以搜索“ UPS”,“商店”或“ 1840”,它将返回它们。 但是,如果我搜索“ 14根蜡烛”,则“ 14”或“蜡烛”都不会返回任何结果。
如果我在PHPMyAdmin中搜索相同的信息,则会发生相同的结果(编辑:好,它给出了“返回0行”,而不是完全错误)。 但是,就像我说的那样,使用$ _POST进行的查询工作正常,并且使用了完全相同的代码(访问相似的搜索,但是提取的数据更少并且具有LIMIT)。
它绝对是在MYSQL中弹出一个错误,因此它与发送的信息有关,这使我认为通过$ _POST发送的格式与$ _GET不同。
我在做什么错,该如何解决?
好吧,对于任何绊倒这个的人,我想我都发现了错误。 出于任何原因,进行INNER JOIN都会使事情变得混乱。 切换到LEFT JOIN和bam,就像一个魅力。 添加了要访问的更多数据,并且使用INNER从四个表中提取数据,然后使用LEFT LEFT从这两个表中提取数据,因此这与在多个表中使用INNER JOIN有关。 SELECT DISTINCT必须保留,否则我将获得十亿个结果(试图使用该结果为权重搜索添加“相关性”选项)。
另外,我有一个理论认为它与归类为latin1_swedish_ci或类似的排序有关,因此我仔细研究了所有表并将其更改为utf8_unicode_ci。 所以这两件事之一
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.