Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 为准备好的语句绑定多个参数_Php_Mysql - Fatal编程技术网

Php 为准备好的语句绑定多个参数

Php 为准备好的语句绑定多个参数,php,mysql,Php,Mysql,我的PHP如下所示: $sql1="SELECT @rownum := @rownum + 1 Rank, q.* FROM (SELECT @rownum:=0) r,(SELECT * ,sum(`number of cases`) as tot, sum(`number of cases`) * 100 / t.s AS `% of total` FROM `myTable` CROSS JOIN (SELECT SUM(`number of cases`) AS s FROM `myT

我的PHP如下所示:

$sql1="SELECT @rownum := @rownum + 1 Rank, q.* FROM (SELECT @rownum:=0) r,(SELECT  * ,sum(`number of cases`) as tot, sum(`number of cases`) * 100 / t.s AS `% of total` FROM `myTable` CROSS JOIN (SELECT SUM(`number of cases`) AS s FROM `myTable` where `type`=:criteria and `condition`=:diagnosis) t where `type`=:criteria and `condition`=:diagnosis group by `name` order by `% of total` desc) q"";
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':criteria', $search_crit, PDO::PARAM_STR);
$stmt->bindParam(':diagnosis', $diagnosis, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);
$sql1="SELECT * FROM myTable WHERE `area` = :criteria AND `condition` = :diagnosis";
    $stmt = $dbh->prepare($sql1);       
    $stmt->execute(array('criteria' => $search_crit, 'diagnosis' => $diagnosis));
我在这一行得到一个错误:
$stmt->execute()

错误显示:

PHP致命错误:未捕获异常“PDOException”,在PHP/rankings.PHP:39中显示消息“SQLSTATE[HY093]:无效参数号”

堆栈跟踪:

“#”0 php/rankings.php(39):PDOStatement->execute()

“#”1{main} 在第39行的php/rankings.php中抛出


我怎样才能解决这个问题?我知道我可以用一个准备好的语句传递多个变量,但我不太确定如何传递。

您可以向execute语句添加一个数组,如下所示:

$sql1="SELECT @rownum := @rownum + 1 Rank, q.* FROM (SELECT @rownum:=0) r,(SELECT  * ,sum(`number of cases`) as tot, sum(`number of cases`) * 100 / t.s AS `% of total` FROM `myTable` CROSS JOIN (SELECT SUM(`number of cases`) AS s FROM `myTable` where `type`=:criteria and `condition`=:diagnosis) t where `type`=:criteria and `condition`=:diagnosis group by `name` order by `% of total` desc) q"";
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':criteria', $search_crit, PDO::PARAM_STR);
$stmt->bindParam(':diagnosis', $diagnosis, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);
$sql1="SELECT * FROM myTable WHERE `area` = :criteria AND `condition` = :diagnosis";
    $stmt = $dbh->prepare($sql1);       
    $stmt->execute(array('criteria' => $search_crit, 'diagnosis' => $diagnosis));

在查询中只能使用一次参数

$sql1="SELECT @rownum := @rownum + 1 Rank, q.* FROM (SELECT @rownum:=0) r,(SELECT  * ,sum(`number of cases`) as tot, sum(`number of cases`) * 100 / t.s AS `% of total` FROM `myTable` CROSS JOIN (SELECT SUM(`number of cases`) AS s FROM `myTable` where `type`=:criteria and `condition`=:diagnosis) t where `type`=:criteria2 and `condition`=:diagnosis2 group by `name` order by `% of total` desc) q";
$stmt = $dbh->prepare($sql1);       
$stmt->execute(array(':criteria' => $search_crit, ':diagnosis' => $diagnosis, ':criteria2' => $search_crit, ':diagnosis2' => $diagnosis));

请向我们显示您收到的完整错误消息,并确保您向我们显示了真实和正确的代码。您确定
$search\u crit
$diagnosis
的内容吗?@Random Yes…刚刚执行了
var\u dump
并且值正确。@Rizier123刚刚用完整的SQL查询更新。我们试图简化一点,但问题可能出在别处。我知道我可以在没有准备语句的情况下运行此查询,而不会出现错误。您确定
@rownum:=@rownum+1
吗,因为
用于定义变量名,这不是问题吗,语句是否需要一个变量名
=
和第三个参数定义?OP的问题的答案在哪里?@jonmrich你确定你给我们看了正确的文件和正确的行吗?你的数组似乎需要一些版本
------>':criteria'
':diagnostics'
这些:colon这是你的完整查询吗?参数在查询中只能使用一次。这正是问题所在。我想这可能会有一些问题,但不知道该怎么办。谢谢