我尝试获取时PDOException(PDO :: FETCH_ASSOC)[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我尝试获取时PDOException(PDO :: FETCH_ASSOC)[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我在php中得到了一个正常工作的页面,但现在我希望通过动态交互显示结果:

当用户在下拉列表中选择一个值时,我将请求限制为所选值。

但是当我尝试时,我得到了:

带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突: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);
答案

当您使用execute(array())时,PDO会将每个参数视为字符串。结果,准备好的LIMIT?,?查询变为LIMIT'number',这是导致查询失败的无效语法。

您可以通过两种方式解决:

  1. 关闭仿真(因为MySQL可以正确地对所有占位符进行排序)。为此,可以运行以下代码: $conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

然后你可以使用你的execute(array());

要么

在设置正确的param类型时显式绑定变量:

$demand_ecard->bindParam(":limite", $_GET["limite"],PDO::PARAM_INT);

以上是关于我尝试获取时PDOException(PDO :: FETCH_ASSOC)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PDO:未捕获的 PDOException:找不到驱动程序

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO

PDO 扩展配置 - 我在我的 PHP 应用程序中不断收到 PDOException“找不到驱动程序”

[单选题]PDO::ATTR_ERRMODE设置为以下哪个值时,PDO会抛出PDOException?

无法在 laravel 3 中捕获 PDOException

php artisan migrate 抛出 PDOException