在PHP中插入mysql时解析错误

时间:2015-04-06 09:35:13

标签: php mysql mysqli

我在php中有以下代码:

$text = 'gd'; 
$ip = '102.123.12.12';

$sql = "INSERT INTO 'database'.'table' ('text', 'ip') VALUES (:text, :ip)";
$params = ["text" => $text, "ip" => $ip];
$conn->query($sql, $params);

在我的服务器上运行后,我收到错误:

解析错误:语法错误,第22行的/home/visavie/domains/visavie.me/public_html/test/cityToDB.php中的意外'['(第22行是从$ params开始的那个= [“.. 。 这可能有什么问题?

2 个答案:

答案 0 :(得分:2)

服务器运行一个较旧的php版本,不支持那样的数组赋值(你需要php 5.4+):

$params = ["text" => $text, "ip" => $ip];

您需要升级服务器或将其更改为:

$params = array("text" => $text, "ip" => $ip);

在此之后,当您对表名和列名使用错误的引号时,您将遇到另一个问题:

$sql = "INSERT INTO 'database'.'table' ('text', 'ip') VALUES (:text, :ip)";

应该是:

$sql = "INSERT INTO `database`.`table` (`text`, `ip`) VALUES (:text, :ip)";

单引号或双引号仅用于值,表名和列名的反引号(如有必要)。

编辑:您还在混合使用mysqli和PDO语法。 mysqli不支持:ip等占位符,您需要?,然后使用bind_param绑定它们。

答案 1 :(得分:1)

我看到2个问题

  • PHP版本可能不支持的数组表示法的一种用法。 更改数组以使用旧样式$param = array()

  • 第二个问题是您的sql语句无效,请删除表名和列名的单引号。


$sql = "INSERT INTO database.table (text, ip) VALUES (:text, :ip)";