0

我知道下面的代码可以注入,但我不确定解决它的最佳方法是什么。最好是重复这$new_id条线还是应该做更多的事情?

控制器:

public function ajax_update_product_youtube()
{
    if($_POST)
    {
        $id = $_POST['id'];
        $new_id = mysql_real_escape_string(trim($_POST['new_id']));
        $table = SITE_REF.'_ps_products';
        if($new_id != "")
        {
            $this->Ps_products_model->update_product_youtube($table, $id, $new_id);
        }                           
    }
}

模型:

public function update_product_youtube($table, $id, $new_id)
    {
        $table = $this->_table_products;
        $this->db->query("
            UPDATE $table SET $table.youtube='$new_id' WHERE $table.id='$id'
        ");
    }
4

1 回答 1

1

使用 CodeIgniter 的 Active Record(查询生成器 3.0),或使用查询绑定。

活动记录:

$this->db->where('id', $id)->update($table, array('youtube' => $new_id));

查询绑定:

$this->db->query("UPDATE {$table} SET youtube = ? WHERE id = ?", array($new_id, $id));

您还应该:

  • 永远不要相信用户输入。在它到达数据库查询之前进行验证和清理。
  • 不要像这样使表名动态化。虽然这样做在技术上没有“错误”,但它给了你自己更多的工作。不要重复自己,保持简单。
于 2013-06-06T22:21:45.813 回答