【问题标题】:PHP T_ENCAPSED_AND_WHITESPACE [closed]PHP T_ENCAPSED_AND_WHITESPACE [关闭]
【发布时间】:2012-10-11 01:03:35
【问题描述】:

我想看看这有什么问题,它说它期待一个']',但我在 mySQL 中没有看到问题,这是它说它搞砸的那一行。

('$_POST[first_name]','$_POST[last_name]','$_POST[email]','$_POST[phone_number]','$_POST[event_name]','$_POST[event_category]','$_POST[event_ description]','$_POST[event_admission]','$_POST[event_amount]',$event_start_date,$event_end_date,'$_POST[event_location]','$_POST[event_family]')";

这里是完整的代码:

$sql="INSERT INTO events_main (first_name, last_name, email, phone_number, event_name, event_category, event_description, event_admission, event_amount, event_start_date, event_end_date, event_location, event_family)VALUES('$_POST[first_name]','$_POST[last_name]','$_POST[email]','$_POST[phone_number]','$_POST[event_name]','$_POST[event_category]','$_POST[event_description]','$_POST[event_admission]','$_POST[event_amount]','$event_start_date','$event_end_date','$_POST[event_location]','$_POST[event_family]')";

【问题讨论】:

  • 真正的问题是这段代码很容易受到 SQL 注入的影响!!
  • @juergend 我是 SQL 新手,那是什么,我该如何解决?
  • $_POST[event_ description] 注意空格。
  • 至少,您必须将其中的每一个替换为通过mysql_real_escape_string($_POST['whatever'])转义的变量
  • here

标签: php mysql database forms


【解决方案1】:

你得到错误的原因是因为event_ description;空间不应该在那里。

但是,在将数据保存到数据库之前,您应该使用类似这样的方法正确转义数据:

$escaped_values = join(',', array_map(function($v) {
    return "'" . mysql_real_escape_string($v) . "'";
}, array(
    $_POST['first_name'],
    $_POST['last_name'],
    $_POST['email'],
    $_POST['phone_number'],
    $_POST['event_name'],
    $_POST['event_category'],
    $_POST['event_description'],
    $_POST['event_admission'],
    $_POST['event_amount'],
    $event_start_date,
    $event_end_date,
    $_POST['event_location'],
    $_POST['event_family'],
)));

$sql = "INSERT INTO .... VALUES ($escaped_values)";

使用准备好的语句更容易,因为转义已为您完成:)

【讨论】:

  • @deceze 好像是这样 :)
  • @deceze .. 只是好奇nonsense code 是什么意思???
  • @Baba 他向我指出mysqli_real_escape_string 需要实际接收参数才能工作......并且最后缺少右括号。
  • @jack .. 很惊讶你甚至使用mysql_real_escape_string 你可以添加use($link) 以包含连接链接
  • @Baba 诚然,我不得不猜测 OP 正在使用 mysql_ 函数; $link 通常不需要,除非您连接到多个数据库;但是是的,我可以使用它:)
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 2012-07-05
  • 2017-10-21
  • 1970-01-01
  • 2017-06-20
  • 2017-05-22
  • 2023-03-11
  • 2013-05-14
相关资源
最近更新 更多