【问题标题】:CodeIgniter Select column into variable give errorCodeIgniter 选择列到变量中给出错误
【发布时间】:2015-02-23 07:11:57
【问题描述】:

我在 codeigniter 上使用事务处理了这段代码

$this->db->trans_begin();

$this->db->query("SET @clientID = {$client_id}, @amount = {$amount}, @gameID = {$game_id}, @tableID = {$table_id}, @tableName = '{$table_name}', @usedBalanceID = NULL");

$this->db->query("SELECT availableBalance INTO @availableBalance FROM client WHERE clientID = @clientID");

SELECT 可用余额 INTO @availableBalance 给我一个错误提示

Severity: Warning  --> mysqli_num_rows() expects parameter 1 to be mysqli_result;
system\database\drivers\mysqli\mysqli_result.php 37

但使用不会返回错误

$this->db->query("SELECT @availableBalance := availableBalance FROM client WHERE clientID = @clientID");

谁能解释为什么我在 codeigniter 上得到这个错误

但是当使用 laravel 上的代码时

SELECT availableBalance INTO @availableBalance FROM client WHERE clientID = @clientID

工作正常。

【问题讨论】:

    标签: php mysql codeigniter mysqli


    【解决方案1】:
    $this->db->trans_begin();
    
    $this->db->query("SET @clientID = {$client_id}, @amount = {$amount}, @gameID = {$game_id}, @tableID = {$table_id}, @tableName = '{$table_name}', @usedBalanceID = NULL");
    
    $this->db->query("SELECT availableBalance INTO @availableBalance FROM client WHERE clientID = @clientID");
    
    • 我刚刚注意到@availableBalance 找不到,所以基本上它会抛出错误。

    "SELECT @availableBalance := availableBalance FROM client WHERE clientID = @clientID";

    • 这运行正常,因为 @availableBalance 被用作存储并被定义/设置。

    我创建了一个示例 sql 脚本来解释我的答案。希望能帮助到你!干杯!

    sqlfiddle

    【讨论】:

      【解决方案2】:

      SELECT INTO 语句selects data from one table and inserts it into a new table。您收到错误是因为查询 $this->db->query("SELECT availableBalance INTO @availableBalance FROM client WHERE clientID = @clientID"); 的 SELECT 部分返回 false,因此无法在表 @availableBalance 中插入任何值。

      请检查client 表,因为SQL 无法在availableBalanceclientID = @clientID 列中找到任何值。

      【讨论】:

      • 但是如果在mysql工作台/控制台上执行查询并返回数据,查询运行顺利,但是当使用它来codeigniter时返回错误,但是使用查询时使用“:=”返回没有错误
      • 您确定 CodeIgniter 使用的数据库与您在 mysql 工作台/控制台中使用的数据库相同吗?请仔细检查!
      • 是的,为什么 SELECT INTO 查询对点火器进行编码时出错,但 SELECT := 对点火器进行编码是可以的。和code igniter的查询生成器有关系吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多