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

Php 为什么在字符串中嵌入数组元素时会出现语法错误?,php,sql,post,insert,Php,Sql,Post,Insert,我正在尝试向数据库中插入一些数据。我可以在一个字段上执行此操作,但不能在多个字段上执行此操作。这似乎是一个简单的语法问题。我得到的错误是: Parse error: syntax error, unexpected ',', expecting ']' 错误出现在插入行上: <?php $con = mysql_connect("local","username","password"); if (!$con) {die('Could not connect: ' . mysql_err

我正在尝试向数据库中插入一些数据。我可以在一个字段上执行此操作,但不能在多个字段上执行此操作。这似乎是一个简单的语法问题。我得到的错误是:

Parse error: syntax error, unexpected ',', expecting ']'
错误出现在插入行上:

<?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)
?> 

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

$x = array("key" => "value");

echo "The value of 'key' is '{$x["key"]}'";  
或连接字符串的各个部分:

echo "The value of 'key' is '" . $x["key"] . "'";
任何一种方法都会产生:

key的值是value'


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

首先,数组索引中缺少引号;它应该是
$\u POST[“STORE”]
,而不是
$\u POST[STORE]
。其次,不能用字符串插值的方式对数组进行索引。您需要使用
{$…}
语法:

$x = array("key" => "value");

echo "The value of 'key' is '{$x["key"]}'";  
或连接字符串的各个部分:

echo "The value of 'key' is '" . $x["key"] . "'";
任何一种方法都会产生:

key的值是value'

注意:我将您的问题回答为一个简单的语法错误,但这并不能解决您真正的问题,这就是猖獗的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= "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="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注入,所以我建议在使用它之前先清理一下你的帖子

阅读有关SQL注入的更多信息

您可以使用此工具清理$\u帖子

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

或者使用PDO并使用准备好的语句来完成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注入,所以我建议在使用它之前先清理一下你的帖子

阅读有关SQL注入的更多信息

您可以使用此工具清理$\u帖子

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

或者使用PDO并使用准备好的语句来完成sql插入、更新等

什么是“多个$\u POST”?你能再解释一下吗?你说的是数组中的
$\u POST
值吗?另外,请阅读您的代码所遭受的一个漏洞。它不应该是
'$\u POST[“3STAR”]'
,等等吗?您正面临着非常糟糕的SQL注入。扔掉这整段代码,它绝对不可出售,重新开始使用。不管你用什么教程来编写这段代码都已经过时了。@Charles我对php和sql非常陌生,很抱歉给你带来了困惑。我的意思是我需要发布所有的数据,所以我假设我说了很多次。@meager对于其中的一部分来说,什么是“多美元的帖子”?你能再解释一下吗?你说的是数组中的
$\u POST
值吗?另外,请阅读您的代码所遭受的一个漏洞。它不应该是
'$\u POST[“3STAR”]'
,等等吗?您正面临着非常糟糕的SQL注入。扔掉这整段代码,它绝对不可出售,重新开始使用。不管你用什么教程来编写这段代码都已经过时了。@Charles我对php和sql非常陌生,很抱歉给你带来了困惑。我的意思是我需要发布所有数据,所以我假设我说了多次。@meager对于itOk的一部分,我也会研究一下,这是用作内部数据库。注入问题的最简单而不是最好的解决方案是使用第二种格式(连接)和
mysql\u real\u escape\u string()
函数。因此,
echo“key”的值为”。mysql\u real\u escape\u字符串($x[“key”])。"'";好的,我也会研究一下,这将用作内部数据库。解决注入问题的最简单但不是最好的方法是使用第二种格式(连接)和
mysql\u real\u escape\u string()
函数。因此,
echo“key”的值为”。mysql\u real\u escape\u字符串($x[“key”])。"'";谢谢Jaspreet的链接。没问题。让您知道PDO是目前为止使用php编写mysql查询的最佳方式。在这里阅读更多谢谢Jaspreet的链接。没问题。让您知道PDO是目前为止使用php编写mysql查询的最佳方式。在这里阅读更多