我在将数组插入sql数据库时遇到了一些麻烦。
我的错误如下:
Unable to add : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '06:45:23,i want to leave a comment)' at line 1
我的查询var_dump是:
string(136) "INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)"
我的问题是如何为id添加空值,因为它是主键而不是news_id
我的插入函数如下所示:
function insertQuery($tbl, &$data)
{
global $mysqli;
$_SESSION['errors'] = array();
require_once '../config/mysqli.php';
$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (".implode(',',array_values($data)).")";
var_dump($query);
if($result = mysqli_query($mysqli, $query))
{
//$id = mysqli_insert_id($mysqli);
print 'Very well done sir!';
}
else
{
array_push($_SESSION['errors'], 'Unable to add : ' . mysqli_error($mysqli));
}
}
注意:数组不是我的强项,所以我可能正确使用它们!
答案 0 :(得分:4)
您需要使用单引号'yyyy-mm-dd hh:mm:ss'
包装数据(您需要将它们应用于所有文本字段(日期,varchar,char,文本等)。另外,请确保正确转义任何单引号可能是文本的一部分。
答案 1 :(得分:2)
值(如果不是数字)必须放在引号之间。 浏览数组并将值放入引号,然后就像在代码片段中那样内爆它。
答案 2 :(得分:1)
你需要一个"
字符串我想发表评论评论
试试这个
$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";
答案 3 :(得分:1)
您在这里正确使用数组,即使是奇怪的方式。你的主要问题是你是怎么做的,你打破了查询:
INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)
应引用字符串值,如下所示:
INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,'Philip','2010-05-11 06:45:23','i want to leave a comment')
从技术上讲,如果你在数字周围加上引号,它也没有什么区别,因为MySQL应该根据需要将它们转换为数字。所以,你的代码应该更像这样:
$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES ('".implode("','",array_values($data))."')";
请注意第二个'
中的额外array_implode
引号。这将使用单引号包装每个值,允许它在数据库中使用。
但请注意,如果任何值包含'
,那么它将会中断。你需要逃避这些,通常使用双,将其转换为''
。如果您使用mysql_escape_string,它会为您处理所有这些,但必须对每个值进行处理。
答案 4 :(得分:0)
我认为你在字符串值周围缺少引号('
),例如值应该是:
17263,'Philip','2010-05-11 06:45:23','i want to leave a comment'
注意:不要忘记使用mysql_real_escape_string
函数作为字符串值。