php - 来自 PHP 的 PREPARE STMT 查询不起作用

标签 php mysql codeigniter prepared-statement

Possible Duplicate:
How can you run a mysqli query with CodeIgniter?

我有一个mysql查询,我试图从php运行它。但是它在codeigniter中给了我一个sql语法错误。当我复制粘贴相同的查询并在 mysql workbench 中运行它时通过替换 @uid@rangee使用正确的值,它可以正常工作。

这是查询:

$this->db->query("
            SET @uid    = ".mysqli_real_escape_string($conid,$userid).";
            SET @rangee = ".mysqli_real_escape_string($conid,$attempt)." * 50;

            PREPARE STMT FROM 
            '
            UPDATE     
                notificationrecievers 
                SET notificationrecievers.status=1 
                WHERE notificationrecievers.status=0 and notificationrecievers.recieverid=? and 

                notificationrecievers.notificationid <=
                (
                     SELECT MAX(notid) FROM
                     (
                      SELECT n.notid FROM user u,notifications n,notificationrecievers nr WHERE
                      nr.recieverid=? AND u.userid=n.senderid AND nr.notificationid=n.notid ORDER BY n.notid DESC
                      LIMIT 50 OFFSET ?
                     )e
                )   

               AND

                notificationrecievers.notificationid >=
                (
                     SELECT min(notid) FROM
                     (
                      SELECT n.notid FROM user u,notifications n,notificationrecievers nr WHERE
                      nr.recieverid=? AND u.userid=n.senderid AND nr.notificationid=n.notid ORDER BY n.notid DESC
                      LIMIT 50 OFFSET ?
                     )g
                );';
            EXECUTE STMT USING @uid,@uid,@rangee,@uid,@rangee;");

为什么它给我这个错误?

最佳答案

首先,query()方法并不是为了执行多个查询。 接下来,您的代码允许通过 $userid 变量进行注入(inject)。

最好从这些原始准备好的语句转移到二进制准备好的语句,如手册中所述

关于php - 来自 PHP 的 PREPARE STMT 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033540/

相关文章:

php - 防止 session 在非事件用户的 PHP session 中过期

php - Slim 3 中间件重定向

php - 测试 Laravel 护照

MySQL 用第一个表中的数据填充第二个表

php - 插入MySQL上传查询php

php - 如何在codeigniter中将<select required>修改为form_dropdown

php - 在 codeigniter 中上传图像时覆盖以前的文件

php - 从 Controller JSON 传递一个值以在 CodeIgniter 中查看 Ajax

php - 将工厂模式与存储库模式相结合以创建或更新/重新加载对象时调用的模式是什么?

mysql - 创建一个查询以获取每个用户的最后 5 行