-1

我正在尝试将 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'...)");

我的错误似乎是什么?是否有任何短代码/功能可以做到这一点?

4

5 回答 5

2

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

编辑:

有关示例,请参见这篇文章。

于 2013-02-12T10:08:36.800 回答
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);

多谢你们!:)

于 2013-02-13T07:22:24.320 回答
0

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

INSERT INTO users SET 用户名 = userTest,电子邮件 = emailTest,密码 = passwordTest

如您所见,userTest,emailTest和周围缺少引号passwordTest,因此这将导致查询失败并出现语法错误。此外,您会注意到这是UPDATE样式语法而不是INSERT样式。

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

于 2013-02-12T10:12:02.637 回答
0

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

于 2013-02-12T10:12:31.447 回答
0

你有没有看过PDO?它基本上可以完成您尝试使用该函数执行的操作,但都包含在 PHP 函数中。

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

于 2013-02-12T10:13:08.833 回答