php插入sql函数

时间:2009-12-17 19:50:45

标签: php sql codeigniter

我想在php中创建一个插入函数,我将用它将数据插入数据库。

当然所有插入都不一样,有些使用其他表使用的表,表有不同的列号等。最好的方法是什么?

我目前正在网页上进行会员注册,现在我不想让每个人都注册,我希望管理员批准哪些会员将获得批准,哪些会不会,所以我设置了一个隐藏字段0,批准后成为一个。

CASE:有人来到网站并使用firebug将输入字段值更改为1并提交注册,自动获得批准,我没有尝试这个我只是考虑可能性。现在,如果我将member_active放在insert函数中,那么它将不适用于具有少量/少数据库列行的其他插入查询。

这样做的方法是,全局/通用插入函数是一个好主意,我几乎知道如何编程所有这些,但最近我对数据/效率和这样的事情变得更加谨慎可以让你的网站更好/更糟,所以我想要一个良好的开端。谢谢

4 个答案:

答案 0 :(得分:3)

CodeIgniter also does this,但现在是:

function Insert($table, $data, $ignore = false)
{
    $sql = array();

    if (is_array($sql) === true)
    {
        $sql['query'] = 'INSERT ';

        if ($ignore === true)
        {
            $sql['query'] .= 'IGNORE ';
        }

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

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

    return implode('', $sql);
}

显然,您需要定义自己的Tick()Quote()函数,以分别回溯数据库实体和转义值。

答案 1 :(得分:2)

如果你要在抽象方面走得那么远,那么你也应该抽象地将查询写入类的整个过程(参见Zend_Db_Select,Doctrine_Query,Propel Criteria等)。

但更多的是你指出,正如Jimmie所说,如果有人注册,你知道他们总是会等待批准...所以甚至不使用表单中的值,在提交后将其添加到表单值数组中但在传递给你的插入功能之前。

答案 2 :(得分:1)

不要在代码中抽象SQL,最好使用数据库的内置功能:存储过程(SP)或某些数据库仅使用数据库函数。

将DB工作抽象到代码中是不合理的,因为您假设表结构永远不会改变(应用程序上的一个重大错误,它会得到不断变化和改进)。

通过创建SP,您可以进行如下的SQL调用:

$query = "EmployeeAdd('joe','smith','1970-12-22')";

现在您的代码具有抽象的优势(甚至有些非特定于数据库),您可以随心所欲地更改表结构,而不必更改单行代码。当然要记住要遵循这种设计思维方式,你需要创建一个EmployeeGet()和一个EmployeeUpdate()函数,这些函数的多个版本是正常的,例如:EmployeeGetByID()EmployeesGetByJobID()

特别注意语法,因为重要的是你要通过数据+动作+如何在为整个数据库编写这些函数之后,如果你要将它们称为GetEmployeeByID(),那么你将会列出数十个SP ,所有的聚会,这使得组织不善。

答案 3 :(得分:0)

如果您正在这样做,请不要使用表单字段直接插入它们(这是我在阅读问题时得到的)。在CI中,将隐藏字段值作为0传递给插入函数,这种可能性消失了。