Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Php mysqli_stmt_bind_param错误-参数数量不匹配_Php - Fatal编程技术网

Php mysqli_stmt_bind_param错误-参数数量不匹配

Php mysqli_stmt_bind_param错误-参数数量不匹配,php,Php,我用php编写了这段代码 $stmt = mysqli_prepare($link, " select e.emp_id, e.first_name, e.last_name, e.hire_date, d.dept_name from employee e, department d where e.dept_id = d.dept_id and (e.first_name like '%(?)%' or e.last_name like '%(?)%')"); mys

我用php编写了这段代码

$stmt = mysqli_prepare($link, "
    select e.emp_id, e.first_name, e.last_name, e.hire_date, d.dept_name
    from employee e, department d
    where e.dept_id = d.dept_id and (e.first_name like '%(?)%' or e.last_name like '%(?)%')");
mysqli_stmt_bind_param($stmt, "ss", $key, $key);
mysqli_stmt_execute($stmt);
mysqli_stmt_affected_rows($stmt);
mysqli_stmt_close($stmt);

我有两个?,我要两个变量。为什么它不明白?我是一个十足的php高手,所以如果你觉得这很可笑,请耐心等待。提前谢谢

实际上您有0个
s和2个参数。
仅在字符串之外工作
mysqli_prepare
'%(?)%'
解释为字符串,而不是占位符

您需要将
%
添加到要绑定的变量中。。。像这样:

$stmt = mysqli_prepare($link, "
    select e.emp_id, e.first_name, e.last_name, e.hire_date, d.dept_name
    from employee e, department d
    where e.dept_id = d.dept_id and (e.first_name like ? or e.last_name like ?)");
$likeKey = "%{$key}%";
mysqli_stmt_bind_param($stmt, "ss", $likeKey, $likeKey);
mysqli_stmt_execute($stmt);
mysqli_stmt_affected_rows($stmt);
mysqli_stmt_close($stmt);
您只需在查询中输入
。不在引号里。对你来说就这样了


另外,您不需要像字符串一样在
中使用
()
(除非它实际上是您要查找的值的一部分)。在
类似的
中,括号按字面解释,没有特殊含义。

实际上您有0个
s和2个参数。
仅在字符串之外工作
mysqli_prepare
'%(?)%'
解释为字符串,而不是占位符

您需要将
%
添加到要绑定的变量中。。。像这样:

$stmt = mysqli_prepare($link, "
    select e.emp_id, e.first_name, e.last_name, e.hire_date, d.dept_name
    from employee e, department d
    where e.dept_id = d.dept_id and (e.first_name like ? or e.last_name like ?)");
$likeKey = "%{$key}%";
mysqli_stmt_bind_param($stmt, "ss", $likeKey, $likeKey);
mysqli_stmt_execute($stmt);
mysqli_stmt_affected_rows($stmt);
mysqli_stmt_close($stmt);
您只需在查询中输入
。不在引号里。对你来说就这样了


另外,您不需要像
字符串一样在
中使用
()
(除非它实际上是您要查找的值的一部分)。在
类似的
中,括号按字面意思解释,没有特殊含义。

您实际上在搜索什么?钥匙,或者是带括号的钥匙,或者…?你到底想搜索什么?键,或是带括号的键,或者…?mysqli\u stmt\u受影响的行不打印结果?@BillyGrande:不,不应该打印。这仅适用于
插入
更新
(以及可能的
删除
)。您没有“影响”任何行,只选择了它们。检查手册(),要获取返回的行数,请使用
mysqli\u stmt\u num\u rows()
。如果您想要结果,则需要使用
mysqli\u stmt\u fetch()
。mysqli\u stmt\u受影响的行不会打印结果?@BillyGrande:不,不应该打印。这仅适用于
插入
更新
(以及可能的
删除
)。您没有“影响”任何行,只选择了它们。检查手册(),要获取返回的行数,请使用
mysqli\u stmt\u num\u rows()
。如果需要结果,则需要使用
mysqli\u stmt\u fetch()