在函数中插入查询

时间:2013-02-12 10:04:47

标签: php mysql function

我正在尝试将INSERT查询放在一个函数中,我想出了这些:

function qry_insert($table, $data, $ignore = false)
    {
        $qry = array();
        if (is_array($qry) === true)
        {
            $qry['query'] = 'INSERT ';
            if ($ignore === true)
            {
                $qry['query'] .= 'IGNORE ';
            }

            foreach ($data as $key => $value)
            {
                $data[$key] = $key . ' = ' . $value;
            }

            $qry['query'] .= 'INTO ' . $table . ' SET ' . implode(', ', $data);
        }
        return implode('', $qry);
}

我正在使用此函数调用此函数:

$data = array(
    'username'=>'userTest',
    'email'=>'emailTest', 
    'password'=>'passwordTest'
);

qry_insert('users',$data);

我的问题是,我没有收到错误,也没有插入项目。我尝试了所有的东西,但我仍然没有插入项目。我的配置和数据库设置是正确的,因为当使用它下面的行时它正在工作。

mysql_query("INSERT INTO users (username,..) VALUES ('userTest'...)");

似乎是我的错误?是否有任何短代码/功能来执行此操作?

5 个答案:

答案 0 :(得分:2)

您实际上并没有使用此代码插入任何内容,您仍需要在调用qry_insert之后执行某种mysqli_insert / query。我的猜测是Code Igniter有一些类来处理这个问题。

编辑:

有关示例,请参阅this post

答案 1 :(得分:2)

我修好了!

function qry_insert($table, $data){

    $fields = array_keys( $data );  
    $values = array_map( "mysql_real_escape_string", array_values( $data ) );
    mysql_query( "INSERT INTO $table(".implode(",",$fields).") VALUES ('".implode("','", $values )."');") or die( mysql_error() );

}



$data = array(
    'username'  =>  'userTest',
    'email'     =>  'emailTest',
    'password'  =>  'passwordTest'
);

$qry = qry_insert('users',$data);
谢谢你们! :)

答案 2 :(得分:0)

您的函数会生成一个不包含字符串值引号的查询。它输出:

  

INSERT INTO用户SET username = userTest,email = emailTest,password = passwordTest

正如您所看到的,它在userTestemailTestpasswordTest周围缺少引号,因此这会导致查询失败并出现语法错误。此外,您会注意到这是UPDATE样式语法,而不是INSERT样式。

最好使用预准备语句重新编写函数并使用正确的INSERT语法,而不是连接值。

答案 3 :(得分:0)

您实际上是使用此函数调用生成sql查询,您需要使用mysql_query将数据插入表中。

答案 4 :(得分:0)

你看过PDO了吗?它基本上完成了你试图用这个函数做的事情,但都包含在PHP函数中。

http://php.net/manual/en/book.pdo.php