【问题标题】:SQL syntax error: can't be foundSQL语法错误:找不到
【发布时间】:2013-12-06 06:50:19
【问题描述】:

我是 SQL 新手,所以我可能遗漏了一些东西。显然我在这一行有语法错误:

 $mysql = 'INSERT INTO Orders (Name, Recipient, Destination, Room, Message, Anonymous, OffCampus, OffCampusAddress) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';

谁能帮我找出我做错了什么?提前致谢

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“?,?,?,?,?,?,?,?)”附近使用正确的语法

这是我的参数绑定:

  mysqli_stmt_bind_param($stmt, 'ssssssss', $name, $recipient, $destination, $room, $message, $anonymous, $offcampus, $offcampusaddress);

【问题讨论】:

  • 在您的帖子中发布错误
  • 抱歉,刚刚添加
  • 你的mysqli_stmt_bind_param在哪里?
  • 尝试将“`”放在列名上
  • 我建议你这样做 mysqli_stmt_bind_param($stmt, @binders) 并将你所有的值放入@binders,更易于阅读和理解以及调试

标签: php mysql sql syntax


【解决方案1】:

应该是这样的:

 $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
 $mysql = "INSERT INTO Orders\n" + 
          "(Name, Recipient, Destination, Room, Message, Anonymous, OffCampus, OffCampusAddress)\n" + 
          "VALUES\n" + 
          "(?, ?, ?, ?, ?, ?, ?, ?)";
 $stmt = mysqli_prepare($link, $mysql);
 mysqli_stmt_bind_param($stmt, 'ssssssss', $name, $recipient, $destination, $room, $message, $anonymous, $offcampus, $offcampusaddress);
 mysqli_stmt_execute($stmt);

【讨论】:

  • 这是个问题吗?还是声明?
  • 这是一个声明,对不起。问号表示我对这种情况的困惑哈哈
  • 尝试使用我刚才放的语句(修改),分成几行,错误代码(行)会更清楚问题出在哪里
  • BTW 显然,您确实为 $name、$recipient 等设置了值?
  • 我现在得到:mysqli 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“0”附近使用正确的语法
【解决方案2】:

尝试为列名添加 `,为值添加 '。它可能会工作

【讨论】:

  • 我认为@Sivaguru 没有足够的声誉。
  • 我认为您的任何一个值都可能包含 ' 引号。您是否使用 mysqli_real_escape_string 作为值?
  • 他正在使用活页夹,所以值本身即使有引号也没有任何影响
  • 我使用 str_replace 替换了任何值中的任何“'”实例
  • 由于你使用的是binder,所以该值不会导致SQL注入或SQL错误,所以不需要替换
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2014-08-27
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
相关资源
最近更新 更多