2015-05-29 2 views
3

Мой 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); 

Я получаю ошибку на этой линии: $stmt->execute();

Ошибка говорит:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number' in php/rankings.php:39

Стек трассировки :

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

"#"1 {main} thrown in php/rankings.php on line 39

Как я могу это исправить? Я знаю, что могу передать несколько переменных с подготовленным оператором, но я не совсем уверен, как это сделать.

+0

Пожалуйста, покажите нам ваше ** полное ** сообщение об ошибке, которое вы получите и убедитесь, что вы показываете нам свой ** настоящий ** и правильный код. – Rizier123

+0

Вы уверены, что контент '$ search_crit' и' $ диагноз'? – Random

+0

@Random Да ... просто сделал 'var_dump', и значение верное. – jonmrich

ответ

2

Вы можете использовать параметры только один раз в запросе

$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)); 
+0

Это была проблема. Я думал, что может быть какая-то проблема с этим, но понятия не имела, что делать в качестве альтернативы. Благодаря! – jonmrich

1

Вы можете добавить массив к выполнить заявление так:

$sql1="SELECT * FROM myTable WHERE `area` = :criteria AND `condition` = :diagnosis"; 
    $stmt = $dbh->prepare($sql1);  
    $stmt->execute(array('criteria' => $search_crit, 'diagnosis' => $diagnosis)); 
+2

А где ответ на вопрос ОП? – Rizier123

+2

Это вызывает ту же ошибку. – jonmrich

+2

@jonmrich Вы уверены, что хотите найти нам правильный файл с правильными строками? – Rizier123

Смежные вопросы