Where子句匹配变量不起作用

时间:2014-03-31 04:24:55

标签: php mysql codeigniter

美好的一天! 我有这个问题:

$name = $this->input->get_post('name');
$unit = $this->input->get_post('unit');
$user = $this->session->userdata('user');
$sql = $this->db->query("select ID from type WHERE code LIKE '%".$unit."%'");
        $result = mysql_query($sql);
$this->db->set('Name', $name);
$this->db->set('Unit', $result);
$this->db->set('Owner', $user);
$this->db->set('CreatedBy', $user);
$this->db->set('ModifiedBy', $user);
$this->db->insert('prod');
$this->db->select('ID');
$this->db->from('type');
$this->db->where('%'.$unit.'% = type.code');

$id = $this->db->insert_id();

return (isset($id)) ? $id : FALSE;

当我在where子句中有条件时,我不知道为什么我不能从表Unit设置值ID的表type

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我不确定代码尝试完成的内容,但like()不需要包含%。如果您致电like('type.code', '%1234%'),则查询将WHERE type.code LIKE '%\%1234\%%'。因此,您只需撰写$this->db->like('type.code', $unit);如果您只希望在一方显示%,或者您想要明确,like()会采用第三个参数,即'both''before''after''none'指定插入%的位置。

这可能不是您唯一的错误:

$sql = $this->db->query("select ID from type WHERE code LIKE '%".$unit."%'");
$result = mysql_query($sql);

The documentation表示上述代码中的$sql将是一个结果对象,并且在其上调用mysql_query()会产生不可预测的结果。要获取实际的结果对象,您应该调用$sql->result()(如果您希望获得多行)或仅$sql->row(),因为您似乎只需要查找一行。

$this->db->set('Unit', $result);

在这里,您要使用$result->ID(假设$result是行而不是行数组)。将单位设置为$result不起作用。要么将Unit设置为0,要么将$result设为stdClass对象而不是标量值的事实设置为其他一些无意的值。

希望有所帮助。

答案 1 :(得分:0)

将“type”表重命名为code_type,看看它是否有效。