为什么在字符串中嵌入数组元素时会出现语法错误


Why do I get a syntax error when embedding array elements in a string?

我正在尝试将一些数据插入数据库。我可以在一个场地上做这件事,但不能在多个场地上。这似乎是一个简单的语法问题。我得到的错误是:

Parse error: syntax error, unexpected ',', expecting ']'

错误出现在INSERT行:

<?php
$con = mysql_connect("local","username","password");
if (!$con)
{die('Could not connect: ' . mysql_error());}
mysql_select_db("npsreviews", $con);
$sql="INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('$_POST[DATE]', '$_POST[STORE]', '$_POST[5STAR]', '$_POST[4STAR]', '$_POST[3STAR]', '$_POST[2STAR]', '$_POST[1STAR]', '$_POST[TOTAL]', '$_POST[NPS]')";
if (!mysql_query($sql,$con)){die('Error: ' . mysql_error());}
mysql_close($con)
?> 

提前感谢,我在寻找Multiple$POST时找不到答案。

首先,数组索引周围缺少引号;它应该是$_POST["STORE"],而不是$_POST[STORE]。其次,不能用字符串插值的方式对数组进行索引。您需要使用{$...}语法:

$x = array("key" => "value");
echo "The value of 'key' is '{$x["key"]}'";  

或者连接字符串的片段:

echo "The value of 'key' is '" . $x["key"] . "'";

任何一种方法都会产生:

The value of 'key' is 'value'

注意:我已经将您的问题回答为一个简单的语法错误,但这并不能解决您的真正问题,即猖獗的SQL注入漏洞。

SQL查询应该像这个

$sql="INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('{$_POST["DATE"]}', 
'{$_POST["STORE"]}', '{$_POST["5STAR"]}', '{$_POST["4STAR"]}', '{$_POST["3STAR"]}', '{$_POST["2STAR"]}', 
'{$_POST["1STAR"]}', '{$_POST["TOTAL"]}', '{$_POST["NPS"]}')";

但在所有的SQL查询中,都倾向于SQL注入,所以我建议在使用之前清理POST

在这里阅读更多关于SQL注入的信息

您可以使用此清理$_POST

$_POST = array_map('mysql_real_escape_string',$_POST);

或者使用PDO并使用准备好的语句来完成sql INSERTS、UPDATES等

按如下方式转义:

$sql= "INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('" . $_POST['DATE'] . "', '" . $_POST['STORE'] . "', '" . $_POST['5STAR'] . "', '" . $_POST['4STAR'] . "', '" . $_POST['3STAR'] . "', '" . $_POST['2STAR'] . "', '" . $_POST['1STAR'] . "', '" . $_POST['TOTAL'] . "', '" . $_POST['NPS'] . "')";