模型PHP SQL IF语句不起作用

时间:2013-06-12 04:54:25

标签: php sql codeigniter

我不清楚为什么下面的语句基本上不起作用我只是希望它运行$result语句,如果在$product_id表中找不到$images。是否发现我希望它运行inner语句。

这两个语句都可以通过phpMyAdmin工作,只需使用$result

$this->db->query语句就可以正常工作

代码:

public function product_delete($product_id)
{
    $table = $this->_table_products;
    $images = $this->_table_product_images;

    $result = $this->db->query("SELECT `id` FROM $table WHERE $table.id ='$product_id'");

    if(mysqli_num_rows($result) !== 0)
    {
        $this->db->query("DELETE FROM $table WHERE $table.id = '$product_id'");
    }else{
        $this->db->query("DELETE FROM $table INNER JOIN $images ON $table.id = $images.product_id WHERE $images.id = $product_id");
    }
}

3 个答案:

答案 0 :(得分:1)

您必须在查询中使用变量名称周围的{}。也可以使用!=代替!==

$result = $this->db->query("SELECT `id` FROM {$table} WHERE {$table}.id ='$product_id'");

if(mysqli_num_rows($result) != 0)
{
    $this->db->query("DELETE FROM {$table} WHERE {$table}.id = '$product_id'");
}else{
    $this->db->query("DELETE FROM {$table} INNER JOIN {$images} ON {$table}.id = {$table}.product_id WHERE {$images}.id = $product_id");
}

答案 1 :(得分:0)

!==更改为!=

if(mysqli_num_rows($result) != 0)
{
    $this->db->query("DELETE FROM $table WHERE $table.id = '$product_id'");
}
else
{
    $this->db->query("DELETE FROM $table INNER JOIN $images ON $table.id = $images.product_id WHERE $images.id = $product_id");
}

答案 2 :(得分:0)

如果要查看图像表,则应查询表${images},而不是${table}。此外,如果您只想了解有多少匹配行,最好使用MySQL中的COUNT()函数。这样你总能获得一行而不是潜在的100,000行。使用函数mysqli_num_rows()的缺点是您失去了CodeIgniter数据库类引入的灵活性。

所以你的代码应该是

$result = $this->db->query("SELECT COUNT(*) `cnt` FROM ${images} WHERE ${images}.product_id ='$product_id'");

$row = $result->row();

if($row['cnt'] != 0) {
    // found something

如果字符串中的变量名称不清楚,您可以使用括号来告诉PHP您想要什么。 "${foo}bar"表示变量为$foobar只是附加到变量内容的字符串。它还有助于提高可读性。我将!==更改为!=,因为我对CI不够熟悉,我不知道该值是整数还是整数的字符串表示。