Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Twitter/typeahead.js在SELECT查询中合并类似SQL_Javascript_Php_Mysql - Fatal编程技术网

Javascript 使用Twitter/typeahead.js在SELECT查询中合并类似SQL

Javascript 使用Twitter/typeahead.js在SELECT查询中合并类似SQL,javascript,php,mysql,Javascript,Php,Mysql,我有以下代码: $places = query("SELECT * FROM places WHERE postal_code = ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?", $_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]); 正如我开始键入(比如纽约)时所预料的那样,在找到与纽约完全匹配的位置之前,

我有以下代码:

$places = query("SELECT * FROM places WHERE postal_code = ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
正如我开始键入(比如纽约)时所预料的那样,在找到与纽约完全匹配的位置之前,下拉框会显示“未找到任何位置”,然后下拉框会显示与纽约完全匹配的多个位置。当我开始键入邮政编码时也是如此

我将代码修改为使用LIKE作为邮政编码,如下所示:

$places = query("SELECT * FROM places WHERE  places.postal_code LIKE ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?",
    $_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
然而,这种修改没有效果。我希望查询返回的位置是基于在zip的开头键入,而不是完整的zip。由于我是SQL新手,我不确定语法,也不确定需要在代码的类似部分中加入哪些修饰符来实现此功能

你可以这样试试

$places = query("SELECT * FROM places WHERE postal_code = ?s or place_name = ?s or admin_code1 = ?s or admin_name2 = ?s or admin_name1 = ?s",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);


使用LIKE时,需要使用通配符。在这种情况下,假设输入的结尾是正确的,并且只缺少所需的结尾:

LIKE '?%'
因此,在您的代码中:

$places = query("SELECT * FROM places WHERE  places.postal_code LIKE '?%' or place_name = '?%' or admin_code1 = '?%' or admin_name2 = '?%' or admin_name1 = '?%'",
    $_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);

我用了这个,它成功了:

 $places = query("SELECT * FROM places WHERE postal_code LIKE ? or place_name LIKE ?  or admin_code1 LIKE ? or admin_name2 LIKE ? or admin_name1 LIKE ?",
    $_GET["geo"] . '%' ,$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%');

不幸的是,这两种方法都不起作用,而且它们完全阻止了任何建议出现在下拉框中,即使是完全匹配的建议。查询返回以下错误:致命错误:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“?s”或place_name=”的正确语法?或管理员代码1=?或管理员名称2=?或者admin_name1=?'使用SQL通配符“%”怎么样?
 $places = query("SELECT * FROM places WHERE postal_code LIKE ? or place_name LIKE ?  or admin_code1 LIKE ? or admin_name2 LIKE ? or admin_name1 LIKE ?",
    $_GET["geo"] . '%' ,$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%');