【问题标题】:PDOException when i try to do fetch(PDO::FETCH_ASSOC) [duplicate]当我尝试执行 fetch(PDO::FETCH_ASSOC) 时出现 PDOException [重复]
【发布时间】:2018-06-21 14:06:26
【问题描述】:

我在 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);

【问题讨论】:

    标签: javascript php ajax pdo


    【解决方案1】:

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

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

    1. 关闭仿真(因为 MySQL 可以正确排序所有占位符)。为此,可以运行以下代码:

      $conn-&gt;setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

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

    或者

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

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

    【讨论】:

    • 我以为是这种情况,但实际上我无法在 PHP 7.1 上重现该错误。也许这只影响早期版本。
    • @Devon 可能是......或者使用 op GET 不是整数
    • 是的,在 7.1 中,即使是字符串 '1' 也可以。所以它必须是一个非数字字符串。
    • 还没有真正用 php 7 @Devon 测试过,我从一开始就很谨慎
    • 谢谢第一种方法效果很好!
    猜你喜欢
    • 1970-01-01
    • 2011-09-03
    • 2013-09-11
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2023-03-04
    • 2015-07-10
    相关资源
    最近更新 更多