繁体   English   中英

如何将此函数转换为准备好的语句?

[英]How can i convert this function to prepared statment?

我有这个 ajax 请求,它可以毫无问题地将数据插入数据库,但是当我尝试将它包装到准备好的语句时不起作用!

$number = count($_POST["title"]);
if($number > 0)
{
    for($i=0; $i<$number; $i++)
    {
        if(trim($_POST["title"][$i] != ''))
        {
            $sql = "INSERT INTO navigations (secret_api_key, title, link) VALUES ('".$_SESSION["secret_api_key"]."', '".mysqli_real_escape_string($db, $_POST["title"][$i])."', '".mysqli_real_escape_string($db, $_POST["url"][$i])."')";
            mysqli_query($db, $sql);
        }
    }
    echo "Data Inserted";
} else {
    echo "Enter Name";
}

这是我试过的准备好的声明:

$number = count($_POST["title"]);
if($number > 0)
{
    for($i=0; $i<$number; $i++)
    {
        if(trim($_POST["title"][$i] != ''))
        {
            $sql = $db->prepare("INSERT INTO navigations (secret_api_key, title, link) VALUES (?, ?, ?)");
            $sql->bind_param("sss", '.$_SESSION["secret_api_key"].", ".$_POST["title"][$i].", ".$_POST["url"][$i]."');
            $sql->execute();
        }
    }
    echo "Data Inserted";
} else {
    echo "Enter Name";
}

如果“.mysqli_real_escape_string($db, $_POST["url"][$i])”,也许会解决。 转换

您肯定会越来越近,但您必须非常密切地注意 PHP 语法。 这是编程,每个字符都很重要

这是一个重新设计的版本:

$sql = $db->prepare("INSERT INTO navigations (secret_api_key, title, link) VALUES (?, ?, ?)");
$sql->bind_param('sss', $_SESSION["secret_api_key"], $_POST["title"][$i], $_POST["url"][$i]);
$sql->execute();

请注意,您发送的是裸参数,而不是字符串,或者是字符串的一部分,或者是带有剩余连接位的字符串。 只是常规变量做常规变量的事情。

如果您没有使用语法高亮编辑器,或者您没有打开该功能,那么它可以极大地帮助您识别此类问题。 您可以在代码片段中看到,仅根据颜色,语法看起来是错误的。 大多数开发人员发现这对于防止简单但容易犯的错误非常宝贵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM