0

我不确定为什么下面的语句基本上不起作用,我希望它运行$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");
    }
}
4

3 回答 3

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");
}
于 2013-06-12T05:00:22.247 回答
0

如果要检查图像表,则应查询表${images},而不是${table}。此外,如果您只对找出有多少匹配行感兴趣,最好使用COUNT()MySQL 中的函数。这样你总能得到一排而不是潜在的 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"意味着变量是$foo并且bar只是附加到变量内容的一些字符串。它还有助于提高可读性。我改成!==!=因为我对 CI 不够熟悉,而且我不知道该值是整数还是整数的字符串表示形式。

于 2013-06-12T05:46:52.457 回答
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");
}
于 2013-06-12T04:57:37.660 回答