Php 为什么SQL查询返回0?实际的查询是什么?

Php 为什么SQL查询返回0?实际的查询是什么?,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,当我编写mysql命令行时,它返回1行,但这段代码不是。。请帮我改正一下 我的sql查询是:select f_name,l_name from user where f_name(如“%s%”或l_name(如“%s”) 这将返回1行。当您使用参数时,它们将按原样发送,并在需要时转义。你写 require 'connect_db.php'; require 'User.php'; $stmnt = $con->prepare("select f_name, l_name from user

当我编写mysql命令行时,它返回1行,但这段代码不是。。请帮我改正一下

我的sql查询是:
select f_name,l_name from user where f_name(如“%s%”或l_name(如“%s”)


这将返回1行。

当您使用参数时,它们将按原样发送,并在需要时转义。你写

require 'connect_db.php';
require 'User.php';
$stmnt = $con->prepare("select f_name, l_name from user where f_name LIKE :q OR l_name LIKE :q OR dept LIKE :q OR batch LIKE :q OR email LIKE :q");
$q = $_GET['q'];
$q1 = "'%".$q."%'";
$stmnt->bindParam(':q',$q1);
$stmnt->execute();
$results = $stmnt->fetchAll(PDO::FETCH_OBJ);
echo count($results);
这意味着最后的字符串将是
'%something%'
,这将转义到SQL查询中。您很可能不希望找到以
开头和结尾的字符串
,因此请删除它们以获得
%something%

$q1 = "'%".$q."%'";

使用参数时,它们将按原样发送,并在需要时转义。你写

require 'connect_db.php';
require 'User.php';
$stmnt = $con->prepare("select f_name, l_name from user where f_name LIKE :q OR l_name LIKE :q OR dept LIKE :q OR batch LIKE :q OR email LIKE :q");
$q = $_GET['q'];
$q1 = "'%".$q."%'";
$stmnt->bindParam(':q',$q1);
$stmnt->execute();
$results = $stmnt->fetchAll(PDO::FETCH_OBJ);
echo count($results);
这意味着最后的字符串将是
'%something%'
,这将转义到SQL查询中。您很可能不希望找到以
开头和结尾的字符串
,因此请删除它们以获得
%something%

$q1 = "'%".$q."%'";

这样试试。无需使用串联运算符(.)

使用带花括号的双引号,并将变量放入其中

$q1 = "%".$q."%";
或者直接写

$q1 = "%{$q}%";

这样试试。无需使用串联运算符(.)

使用带花括号的双引号,并将变量放入其中

$q1 = "%".$q."%";
或者直接写

$q1 = "%{$q}%";

抢手货最好是去掉这个
$q2
变量,并在函数调用本身中编写它。最好是把这个问题烧掉以防输入错误。@PierreLebon在这种情况下,这不是输入错误,而是关于如何从字符串链接到参数的误解。这是一个容易犯的错误,对初学者来说并不明显。除非有一个复制品,否则它可能会帮助其他人。最好是去掉这个
$q2
变量,并在函数调用本身中编写它。最好是把这个问题烧掉以防输入错误。@PierreLebon在这种情况下,这不是输入错误,而是关于如何从字符串链接到参数的误解。这是一个容易犯的错误,对初学者来说并不明显。除非有复制品,否则它可能会帮助其他人。