我在PHP中有一个页面可以很好地完成工作,但是现在我想通过动态交互来显示结果:
当用户在下拉列表中选择一个值时,我会将请求限制为所选的值。
但是当我尝试时我得到了:
未捕获的异常'PDOException',消息为'SQLSTATE [42000]:语法错误或访问冲突:1064
我的js工作正常,但是PHP现在坏了,我也不知道为什么。
有人可以看到问题吗?
$bdd = dbConnect();`
$demand_ecard = $bdd->prepare("SELECT *
FROM mes_ecards
JOIN reseaux_socecard ON (mes_ecards.id_mesecard = reseaux_socecard.id_ecard)
WHERE mes_ecards.id_mesecard IN (SELECT id_ecard
FROM demande_keepro
WHERE etat_demande = 0)
LIMIT :limite");
$demand_ecard->execute(array(':limite'=>$_GET["limite"],));
echo ('<form>');
while ($tabl_result = $demand_ecard->fetch(PDO::FETCH_ASSOC) ){
echo('<br><hr style="height: 2px; color: #000000; background-color: #000000; border: none;">
<div id="'.$tabl_result['id_user'].'" class="count">
<span class="ecardvaleur" class="ecardvaleur">login : '.$tabl_result['login_user'].'</span class="ecardvaleur" ><br>');
if($tabl_result['prefix']!=''){
echo ('<span class="ecardvaleur" >prefix : '.$tabl_result['prefix'].'</span class="ecardvaleur" ><br>');
}`
/* many other if */
echo ('
<br>
<input class="valide" type="radio" id="'.$tabl_result['id_user'].'v" name="'.$tabl_result['id_user'].'" value="confirmer">
<label for="'.$tabl_result['id_user'].'v">confirmer</label>
<input class="denied" type="radio" id="'.$tabl_result['id_user'].'r" name="'.$tabl_result['id_user'].'" value="refuser">
<label for="'.$tabl_result['id_user'].'r">refuser</label>
');
echo('</div>');
}
echo ('</form>
</div>
</div>');
mysql_close($connexion);
答案 0 :(得分:0)
使用execute(array())
时,PDO将每个参数都视为字符串。结果,准备了LIMIT?,?查询变为LIMIT'number',这是导致查询失败的无效语法。
您可以通过两种方式解决:
关闭仿真(因为MySQL可以正确排序所有占位符)。为此,可以运行以下代码:
$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
然后您可以使用execute(array());
或
在设置适当的参数类型时明确绑定变量:
$demand_ecard->bindParam(":limite", $_GET["limite"],PDO::PARAM_INT);