Php 为准备好的语句绑定多个参数
我的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
$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这是你的完整查询吗?参数在查询中只能使用一次。这正是问题所在。我想这可能会有一些问题,但不知道该怎么办。谢谢