我有这个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'')
这会产生错误,因为最后有一个额外的',我怎么能阻止这种情况发生?
答案 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) . "') ";