PHP使用几个参数插入到SQL语句中

时间:2015-07-27 14:52:56

标签: php mysql

我有一个简单的php INSERT INTO SQL语句,它只是拒绝一次更新多个列。我不知道为什么,但以下声明是可接受的;

$sql = "INSERT INTO niceTable (first) VALUES ('Hello')";

但是,如果我尝试关注

$sql = "INSERT INTO niceTable (first, last) VALUES ('Hello', 'You')";

它崩溃并抛出以下错误:

"更新记录时出错:您的SQL语法出错;检查与您的MariaDB服务器版本相对应的手册,以获得正确的语法,以便使用(' desc)VALUES(' Hello','更新')'在第1行"

我检查了语法,但似乎没问题。我正在使用one.com服务器。有人有任何提示吗?

3 个答案:

答案 0 :(得分:3)

根据您发布的代码":

原因是firstlast是MySQL保留字

需要特别注意。

将它们包裹在刻度线中,或者将它们重命名为保留关键字以外的其他内容。

INSERT INTO niceTable (`first`, `last`)

修改但是,您的错误不支持此处的问题,也不支持列名称:

  

正确的语法在' desc)

附近使用

这告诉我你正在使用desc这也是另一个MySQL保留字。

您还应该使用预备语句

另外,如果您的输入包含MySQL可能会抱怨的字符,例如撇号John O'Neil,那么您将需要转义这些值。

MySQL会将其解释为('Hello', 'John O'Neil'),从而导致另一种语法错误。

转义它,将其解释为('Hello', 'John O\'Neil')使其有效。

  • 我在这里思考

答案 1 :(得分:2)

您的实际查询(不是您问题中的查询)似乎有所不同。错误消息似乎在某处desc,这是一个保留字。如果您使用保留字作为列名(不要),则应将它们用反引号括起来:

INSERT INTO tbl (`order`, `desc`) VALUES ('foo', 'bar');

答案 2 :(得分:1)

将列名括在反引号中

Last是MySQL中的一个函数

$sql = "INSERT INTO niceTable (`first`, `last`) VALUES ('Hello', 'You')";