【发布时间】:2015-01-08 15:44:22
【问题描述】:
我现在在关联数组中插入数据时遇到问题,其键作为表中的字段以及要插入 MySql 数据库的值。这是我的代码。
<?php
$table = 'articles';
$data = array(
'title' => 'Header',
'content' => 'This is content',
'author' => 'James');
$keys = implode(', ', array_keys($data));
$values = implode(', ', array_values($data));
$sql = 'insert into '.$table.'('.$keys.') values ('.$values.')';
$db = new mysqli('localhost', 'root', 'root', 'blog');
$db->query($sql);
?>
使用此代码,我无法将数据插入到数据库中,因此我尝试将查询字符串回显出来,结果如下:
insert into articles(title, content, author) values (Header, This is content, James)
但是,如果我像这样在每个值中使用单引号
insert into articles(title, content, author) values ('Header', 'This is content', 'James')
我可以成功地将数据插入到数据库中。
所以我不知道这里出了什么问题。引号是否有问题,因为当我使用单引号时,这似乎有效。
所以请帮我找到合适的解决方案...
【问题讨论】:
-
字符串变量周围需要单引号。
-
在我看来你已经回答了你自己的问题。但是,您需要正确转义您的值(或使用准备好的语句)并确保您的键是有效的列名并且不包含例如需要使用反引号引用的保留字。
-
你没有检查错误;做。
if(!$result = $db->query($sql)){ die('There was an error running the query [' . $db->error . ']'); } -
无论如何在 implode() 之后自动将单引号插入到值中。这是我收到的错误您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“内容,James)”附近使用正确的语法
-
Jay 下面的回答对你有用。我知道,我自己测试过。