我不清楚为什么下面的语句基本上不起作用我只是希望它运行$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");
}
}
答案 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"
表示变量为$foo
,bar
只是附加到变量内容的字符串。它还有助于提高可读性。我将!==
更改为!=
,因为我对CI不够熟悉,我不知道该值是整数还是整数的字符串表示。