SQL在函数中插入查询

时间:2013-12-31 16:21:31

标签: php sql

我有这个PHP函数:

function InsertQuery($table, $cols, $values) {
    global $conn;
    $InsertQuery_Sql = "INSERT into $table (" . implode(",", $cols) . ") values (" . implode("','", $values) . "'') ";
    echo $InsertQuery_Sql;
    $InsertQuery_Rs = mysql_query($InsertQuery_Sql, $conn);
}

我在这里调用函数:

$cols = array("ticketnumber", "status");
$values = array("1234", "Open");
InsertQuery('tickets', $cols, $values);

,SQL看起来像:

INSERT into tickets (ticketnumber,status) values (1234','Open'')

这会产生错误,因为最后有一个额外的',我怎么能阻止这种情况发生?

6 个答案:

答案 0 :(得分:3)

您在查询结束时自己添加''。修改

$InsertQuery_Sql="INSERT into $table (".implode(",", $cols).") 
                  values (".implode("','", $values)."'') ";
                                                     ^^
                                                     your culprit

并将''替换为'

$InsertQuery_Sql="INSERT into $table (".implode(",", $cols).") 
                  values (".implode("','", $values)."')";

修改

虽然这是关于''的问题的答案,但实际上您的代码在其他方面也很糟糕:您不应该使用mysql扩展名,因为它已被弃用 - >使用mysqli甚至更好PDO。在使用之前,您应该转义任何传递的值(请参阅mysqli_real_escape_string(),否则您很容易受到SQLInjection攻击。

缺少开放' - 只需添加:

$InsertQuery_Sql="INSERT into $table (".implode(",", $cols).") 
                  values ('".implode("','", $values)."')";

答案 1 :(得分:1)

之前必须有'

$InsertQuery_Sql="INSERT into $table (".implode(",", $cols).") values ('".implode("','", $values)."') ";

答案 2 :(得分:0)

使用自定义函数来内爆和包装值:

function implode_wrapped($before, $after, $glue, $array) 
{
    $out = '';
    foreach ( $array as $item ){
        $out .= $before.$item.$after.$glue;
    }

    return substr($out, 0, -strlen($glue));
}

$InsertQuery_Sql="INSERT into $table (".implode_wrapped('`', '`', ',', $cols).") values (".implode_wrapped("'", "'", ',', $values).") ";

你也应该停止使用mysql_函数并切换到mysqli_,或者更好的是PDO。

答案 3 :(得分:0)

使用过程样式mysql_命令是旧的并且已弃用;你根本不应该使用它们。

虽然@Marcin Orlowski确实举了一个如何解决这个问题的例子;他并没有真正解决你的代码中的任何其他问题。即使使用他的代码,取决于$values的来源,您的ccode对MySQL注入完全开放。

我建议将代码库重写为使用MySQLi和预处理语句。请参阅quick start guide

答案 4 :(得分:0)

//编辑这样的函数..

function InsertQuery($table, $cols, $values) {
       global $conn;
       $InsertQuery_Sql = "INSERT into $table (" . implode(",", $cols) . ") values ('" .            implode("','", $values) . "') ";
       echo $InsertQuery_Sql;
       $InsertQuery_Rs = mysql_query($InsertQuery_Sql, $conn);
}

答案 5 :(得分:-1)

试试这个

$InsertQuery_Sql = "INSERT into $table (" . implode(",", $cols) . ") values ('" . implode("','", $values) . "') ";