Php 联系API,错误';这只是时间的一部分。。。?

Php 联系API,错误';这只是时间的一部分。。。?,php,mysql,sql,api,error-handling,Php,Mysql,Sql,Api,Error Handling,我已经编写了PHP代码,该代码连接到MYSQL以查找信息,将其发送到API,并获得一个响应以写回一个新表 有时它工作得很好,但有时却不行。如果没有,它会给我这个错误 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , '', '', '')' at line 1 或者有

我已经编写了PHP代码,该代码连接到MYSQL以查找信息,将其发送到API,并获得一个响应以写回一个新表

有时它工作得很好,但有时却不行。如果没有,它会给我这个错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , '', '', '')' at line 1
或者有时它会将一个或两个条目写入新表,然后在另一行给出错误。哦,即使我为API选择了相同的数据来查找和发送,有时它会工作,有时不会(我已经从发送的字符串中去掉了所有逗号,以减少可能的逗号错误)

我想知道这是API还是我的代码的问题。我无法理解它在某些时候是如何工作的,并且在代码问题上是一个问题,这导致了我对可能的API问题的思考

我的假设是:

  • 我拥有的API密钥功能有限,因此限制了我的结果
  • 等待响应需要很长时间,因此我的请求超时 这两个都有意义吗?还有其他想法吗

    下面是php代码,它有时会返回一些信息:

    有时它会发出回声。但其他时候不会。函数$request->API函数php中提供的任何函数

    我相信抛出错误的sql行与此有关:

    insertRow($db, $new_table, $Merchant, $ips, $scoreBeforeGeo, $geoFactor, $scoreAfterGeo, $category, $overall_protocol, $protocol_name);
    
    function insertRow($db, $new_table, $Merchant, $ips, $scoreBefore, $geoFactor,      $scoreAfter, $category, $overall, $protocol)
    {
       $insert = "INSERT INTO $new_table " . " VALUES('$Merchant', '$ips', $scoreBefore, $geoFactor, $scoreAfter, '$category', '$overall', '$protocol');";
    $q = mysqli_query($db, $insert) || die(mysqli_error($db));
    }
    

    同样,有时有效,有时无效……

    您的代码没有清理查询的输入或通过参数传递。这意味着,如果传递到INSERT语句中的数据包含将被解释为SQL语法的字符(如撇号),则会弄乱语句它还可能破坏或提供对数据的意外访问。换句话说,这是一种等待发生的SQL注入攻击


    使用事先准备好的声明来防范这种情况

    为了确定问题出在哪里,当您在查询中收到错误时,您可以记录实际查询是什么,以及一些可能帮助您找到原因的其他信息,如API的页面内容等。此错误是否来自API?哪段代码在与MySQL对话,是您正在使用的API还是您的代码?错误似乎来自MySQL,我已经尝试在API写入MySQL之前简单地回显API中的变量,以便查看它们是什么。他们有时工作,有时不工作。这就是我认为它与API有关的另一个原因。但是,即使变量没有返回,MYSQL难道不应该只将这些列留空就可以编写表吗?@user1475765-我知道错误来自MYSQL,是谁在向数据库、API还是您的代码写入数据?您可以发布生成此错误的代码示例吗?您提到它“有时有效”,您的意思是重复传递相同的数据有时有效,有时会产生此错误吗?对我来说,这听起来很奇怪,通常格式错误的SQL不会间歇工作。我已经添加了一些代码。我正在给数据库写信。API只是评估我发送给它的内容,然后为存储编写它。是的,我的意思是相同的数据有时会产生结果,有时会抛出错误,有时会在另一行抛出错误。我刚刚开始使用sql编写。我会投票给你,我理解sql注入部分。这是内部的,所以我不太担心。但我仍然不明白为什么有时候它能处理相同的数据,而有时候却不能。你对此有什么理论吗?你得到的错误强烈地表明你的数据中有干扰SQL语法的字符——很可能是一个非转义撇号。尝试将其转换为prepared语句方法,看看是否仍有错误。绑定参数并通过prepare实现参数是否会使用sql语法处理撇号和逗号?是的,它们将作为文字数据传递,而不是解释为sql语法。