PHP&;Mysql语法不正确?

PHP&;Mysql语法不正确?,php,mysql,Php,Mysql,我有一个问题,这不是运行在所有的信息提交时,我相信我有语法错误 if ($_POST['note'] != $player->note_text) { $message = 'Admin '.$user.' has added the note ('.$_POST['note'].') to '.$player->name.'('.$pid.')'; logIt($user, $message, $dbcon); $note = $_POST['note']

我有一个问题,这不是运行在所有的信息提交时,我相信我有语法错误

 if ($_POST['note'] != $player->note_text) {
    $message = 'Admin '.$user.' has added the note ('.$_POST['note'].') to '.$player->name.'('.$pid.')';
    logIt($user, $message, $dbcon);
    $note = $_POST['note'];
    $note = '"'.$note.'"';
    $UpdateN = "INSERT INTO notes (uid, staff_name, name, alias, note_text, warning) VALUES ('$_POST[hidden]', '$user', '$player->name', '$player->aliases', '$note','$_POST[warn]')";
    $UpdateN2 = "INSERT INTO players WHERE `playerid` = $_POST[hidden] (warning) VALUES ('$_POST[warn]')";
    mysqli_query($dbcon, $UpdateN, $UpdateN2);
我添加的新行是“$UpdateN2”,这似乎打破了它。 我不确定这句新词是否打破了这一说法,因为我对PHP和mysqli都是新手,如果有任何指向论坛或网站的指针,我可以以更详细的方式学习和理解,我将不胜感激

编辑:我已经从使用mysqli转到了PDO,我强烈建议任何愿意开始在PHP中使用MYSQL命令的人都来看看这个:


我开始阅读并进行测试,我发现这要容易得多,但几天后再阅读时,它看起来更清晰易懂。

如果是我的话,我只需分别打两个电话到mysqli\u query,每个单独的查询一个。由于可能存在sql注入漏洞,PHP历来非常谨慎,不允许在单个函数调用中进行多个查询

另一方面,您需要对输入进行清理$_POST永远不应该直接出现在mysql查询字符串中,因为您的POST数据可能(实际上)类似于“')“DROP TABLE users;”

最后,您在insert上使用WHERE子句。这可能会破坏您的查询。您应该花几天的时间研究如何以及为什么会破坏您的查询,以及如何以及为什么要编写正确的sql查询。这样做将为您的公司增加价值,因为您的公司不太可能遭受灾难性的数据破坏,而且它会为您增加价值,因为您将成为一名更好的SQL程序员


编辑:在我写这篇文章的时候,三个不同的人提出了每一个观点。哈哈。

与原始版本中的mysqli过程风格保持一致,使用带绑定占位符的准备语句,类似这样:

   $UpdateN = 'INSERT INTO notes (uid, staff_name, name, alias, note_text, warning)'
            . ' VALUES ( ?, ? , ? , ? , ? , ? )';

   $UpdateN2 = 'UPDATE players SET warning = ? WHERE playerid = ? ';

   if( $sth = mysqli_prepare($dbcon,$UpdateN) ) {
      mysqli_stmt_bind_param($sth,'ssssss'
         ,$_POST['hidden']
         ,$user
         ,$player->name
         ,$player->aliases
         ,$_POST['note']
         ,$_POST['warn']
      );
      if( mysqli_stmt_execute($sth) ) {
         // statement execution successful
      } else {
         printf("Error: %s\n",mysqli_stmt_error($sth));
      }
   } else {
      printf("Error: %s\n",mysqli_error($dbcon));
   }

   if( $sth2 = mysqli_prepare($dbcon,$UpdateN2) ) {
      mysqli_stmt_bind_param($sth2,'ss'
        ,$_POST['warn']
        ,$_POST['hidden']
      );
      if( mysqli_stmt_execute($sth2) ) {
         // statement execution successful
      } else {
         printf("Error: %s\n",mysqli_stmt_error($sth2));
      }
   } else {
      printf("Error: %s\n",mysqli_error($dbcon));
   }

这里有很多问题。
mysqli\u query
只接受一个查询。该死的儿子,如果你想输入用户提供的变量,请使用准备好的语句,你永远不能相信那些用户:PAny basic sql tutorial会告诉你insert没有where子句。mysqli\u query可以执行一个查询。mysqli\u query需要三个参数。第一个是连接(可选)第三个是结果模式。从对mysqli_查询的调用中删除
,$UpdateN2
。第二个insert语句的语法错误,不允许使用WHERE子句。代码易受SQL注入的影响。请理解这不是我的工作,因此我无法开始更改它的加载。如果有人可以帮助我并添加到这对我也有帮助。这只是一个游戏社区,允许我们管理与玩家角色链接的游戏内数据。这个特定片段实际上是允许管理员向用户发布评论。你实际上想做的是更新,而不是插入,证据表明,如果我帮你,而不是指导你如果你想阅读SQL教程,你只会进一步破坏你的网站数据库和安全性。我知道,我是新来的,对此很感兴趣,但由于这不是我的工作,我不知道我需要学习什么来满足我的需要。如果你仍然停留在这一点上,这里是一些关于注入漏洞的php文档。我如果这看起来像一堆胡言乱语,请先回到这里:但在阅读并理解有关sql注入的部分之前,不要编写任何代码。我尝试了这一点,这对我来说非常有用,但我确实查看并出错了。error:您的sql语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解r第1行的“[hidden]、$user、$player->name、$player->alias、$note、$\u POST[warn])附近使用的语法不正确。ConnorNee:我在发布后做了一些调整。(我缺少一个paren,一个错误的变量名
$stsh2
)我应该添加<代码> mysQuixStMTyCux调用。这是一个PHP错误,还是一个MySQL错误?如果它是打印(“错误:”消息)之一,考虑在消息文本中添加一个文字来区分代码中的哪一行正在发出它,<代码> PrTrF(“职员01编写错误:< /COD>,<代码> PrtTF”)。“staff#02执行错误:
,等等。如果是MySQL错误,那么这应该表明问题的性质。我将发出为绑定变量提供的值。@Connere。我怀疑您忽略了用绑定占位符
(问号字符)替换SQL文本中的变量。”。请查看分配给
$UpdateN
的示例SQL文本…注意
值(?,,,,,
。不,我从使用“?”中得到了您的意思,所以我更改了它们。找到了与
printf(“Staff2:%s\n”,mysqli_error($dbcon))相关的错误。