pdo参数化查询

qq24tv8q  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(456)

当我在google cloud shell中运行此查询时,它工作正常,并按预期返回5行数据:

SELECT * FROM tblData WHERE Address LIKE '%123 Queen%' LIMIT 5;

但当我用同样的搜索词 123 Queen 对于此参数化pdo查询,它不返回任何结果:

$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$stmt = $conn->prepare("SELECT * FROM tblData WHERE Address LIKE :term LIMIT 5");
$stmt->execute(array(':term' => '%'.$_GET['term'].'%'));

我做错什么了?

93ze6v8z

93ze6v8z1#

尝试以下操作: SELECT * FROM tblData WHERE Address LIKE CONCAT('%',:term,'%') LIMIT 5

9rnv2umw

9rnv2umw2#

我最初的问题是为什么这个参数化pdo查询没有返回任何记录:

$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$stmt = $conn->prepare("SELECT * FROM tblData WHERE Address LIKE :term LIMIT 5");
$stmt->execute(array(':term' => '%'.$_GET['term'].'%'));

$array = array();
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) AS $x) {
   $array[] = $x;
}

事实证明,上面的代码绝对没有错。我的错误是在 json_encode 声明如下。我错误地提到 array ,当我应该提到 $array 这样地:

$array = $array ?: array('Not Found');
echo json_encode($array);

我是应@lundincast的请求提供此答案的。

相关问题