【问题标题】:Mysqli query not working in PHP code after been sent by Ajax由 Ajax 发送后,Mysqli 查询在 PHP 代码中不起作用
【发布时间】:2018-05-03 16:04:37
【问题描述】:

我在处理一些 Myqsli 查询时遇到了一些问题。

$sqlselect = "SELECT visitatori_id FROM visitatori WHERE   visitatori_nome='".$nome."' AND visitatori_cognome='".$cognome."' AND 
visitatori_orastart='".$time."' AND visitatori_idsede='".$idsede."'";   


if ($conn->query($sqlselect) === TRUE) 
{
    $resultz     = $conn->query($sqlselect);        
    $rowz        = $resultz->fetch_assoc();        
    $id          = $rowz["visitatori_id"];
    $data        = date('dmY');        
    $arr         = $id."/".$data.$idref.$idrep.$idsede;
    $JSON->value = $arr;
    $json        = json_encode($JSON);    
    echo $json;                      
    break;
}
else
{
    $JSON->value = $conn->error;
    $json = json_encode($JSON);    
    echo $json;
    break;
}

在数据库上启动的查询完全没有问题。 但是如果我尝试在 PHP 代码中启动它,if 返回false,而$conn->error 只是""

我进行了很多搜索,但找不到任何至少可以向我显示错误的内容。

编辑

我知道这段代码可以注入,但是在mysqli语句之前我总是用正常查询做一些测试,无论如何感谢提醒。

【问题讨论】:

  • 您的代码容易受到SQL injection attacks 的攻击。您应该通过mysqliPDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • ^ 不只是 SQL 注入攻击,引用也很头疼。切换到准备好的语句,这些令人头疼的问题就消失了。
  • === 检查 EXACT 条件...也就是您的查询是否返回 true...如果返回 NOT FALSE 则不一定
  • 为什么不使用准备好的语句?只要查询中有变量,准备好的语句在所有方面都更好地转义它们。
  • @PhillipWeber 差异真的可以忽略不计。如果您认为您可以编写一些比 PHP 方面的人更好的代码,他们会很高兴 - 但实际上,准备好的语句是要走的路,它在所有方面都优于转义输入。如果您如此依赖速度,那么在优化之前您应该考虑许多其他方面。

标签: javascript php jquery mysql ajax


【解决方案1】:

您的条件检查需要检查“非假”或松散的真(==)(mysqli_query 在成功选择时返回 mysqli_result 对象,在失败时返回假:http://php.net/manual/en/mysqli.query.php).. 你正在执行当我确定您不是故意的时,相同的查询两次。此外,正如其他人所说,此代码容易注入(参见:http://php.net/manual/en/mysqli.real-escape-string.phphttps://en.wikipedia.org/wiki/SQL_injection)。

if( ($res = $link->query($queryString)) ){
    if( $res->num_rows > 0 ){
        $row = $res->fetch_assoc();
        /* Do something with result */
    }else{
        /* No results, do something else */
    }
}

在此之前...您应该转义所有必要的数据以避免注入攻击:

$link->escape_string($aString);

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多