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查询的最佳方式。在这里阅读更多