PHP MySQL在prepared语句中围绕匿名变量抛出错误

PHP MySQL在prepared语句中围绕匿名变量抛出错误,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,当我运行我准备好的语句时,我得到以下错误: 错误:在文章中插入(url,headline,publidate,源代码,image\u loc)值(?,,,?,?) 您的SQL语法有错误;在第6行的“?,?,?,?,?)”附近,查看与MySQL服务器版本相对应的手册,以获得正确的语法 下面是似乎抛出错误的代码: $sql = "INSERT INTO $tableName (`url`, `headline`,

当我运行我准备好的语句时,我得到以下错误:

错误:在文章中插入(
url
headline
publidate
源代码
image\u loc
)值(?,,,?,?) 您的SQL语法有错误;在第6行的“?,?,?,?,?)”附近,查看与MySQL服务器版本相对应的手册,以获得正确的语法

下面是似乎抛出错误的代码:

            $sql = "INSERT INTO $tableName (`url`, 
                            `headline`, 
                            `pubDate`, 
                            `source`, 
                            `image_loc`) 
                VALUES(?, ?, ?, ?, ?)";

        // MySQLi connection, binds variables to prevent injection, executes
        $stmt = $connection->prepare($sql);
        $stmt->bind_param('sssss', $url, $headline, $pubDate, $source, $image_loc);
        $stmt->execute();
编辑:以下是我在一个单独的文件中设置的连接。从某种意义上说,一切都在被拯救。。。我只是还在犯错误

$servername = "localhost";
$username = "xxxxxx";
$password = "xxxxxx";
$dbname = "news";
$tableName = "articles";

$connection = mysqli_connect($servername, $username, $password, $dbname);

if (!$connection) {
  die("Connection failed: " . mysqli_connect_error());
}
再次编辑:这是用来检查插入是否成功的代码,尽管我猜这可能是问题的根源(但我没有足够的经验来理解原因):

if(mysqli_查询($connection,$sql)){
echo“新记录创建成功”;
}否则{
echo“Error:”.sql.“
”.mysqli_Error($connection)。“
”; }
您的代码:

if (mysqli_query($connection, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($connection) . "<br>";
}
您的代码:

if (mysqli_query($connection, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($connection) . "<br>";
}
而不是

if (mysqli_query($connection, $sql)) {
        echo "New record created successfully";
} else {
        echo "Error: " . $sql . "<br>" . mysqli_error($connection) . "<br>";
}
而不是

if (mysqli_query($connection, $sql)) {
        echo "New record created successfully";
} else {
        echo "Error: " . $sql . "<br>" . mysqli_error($connection) . "<br>";
}

我想你需要在
值之后和braket之前留一个空格。如果你加上这一行,
print\r($stmt);模具()
$stmt->execute()之前奇数。我觉得不错。那是你的密码吗?您能否将其归结为一个仍然显示问题的最小完整示例(包括设置
$tableName
等)?这看起来就像是在没有绑定变量的情况下执行语句时会出现的错误。(另外,具体来说,
$connection是什么类型的?
?您是如何创建它的?)令人难以置信的是,您能尝试一下@worldofjr提出的建议吗?我清楚地记得在5.4之前MySQL也有同样的问题。只需在关键字
VALUES
后面加一个空格,然后再试一次。我想你需要在
VALUES
后面和braket前面加一个空格。如果你加上这一行,输出是什么:
print\r($stmt);模具()
$stmt->execute()之前奇数。我觉得不错。那是你的密码吗?您能否将其归结为一个仍然显示问题的最小完整示例(包括设置
$tableName
等)?这看起来就像是在没有绑定变量的情况下执行语句时会出现的错误。(另外,具体来说,
$connection是什么类型的?
?您是如何创建它的?)令人难以置信的是,您能尝试一下@worldofjr提出的建议吗?我清楚地记得在5.4之前MySQL也有同样的问题。只需在关键字
后加一个空格,然后再试一次。所以要问一个最愚蠢的问题-错误不在原始代码中,而是在我认为正在检查它是否成功的过程中?如果我去掉它,它不会抛出错误。有没有一种简单的方法可以检查我的产品是否成功插入?@Chris我更新了我的答案。是的,基本上,您最初的“错误检查”代码实际上是在尝试再次执行查询,只是没有绑定参数。你所需要做的就是检查
execute()
语句的返回值,看看它是否有效。因此,要问一个最愚蠢的问题——错误不在原始代码中,而是在我认为检查它是否成功的过程中?如果我去掉它,它不会抛出错误。有没有一种简单的方法可以检查我的产品是否成功插入?@Chris我更新了我的答案。是的,基本上,您最初的“错误检查”代码实际上是在尝试再次执行查询,只是没有绑定参数。您所需要做的就是检查
execute()
语句的返回值,以确定它是否有效。
if ($connection->affected_rows > 0) {
        echo "New record created successfully";
} else {
        echo "Error: " . $sql . "<br>" . $connection->error() . "<br>";
}