Mysqli 绑定参数不起作用

Mysqli bind parameters not working

我正在尝试使用准备好的语句在数据库中输入数据。未准备好的语句有效,但此准备好的语句无效。我不知道为什么。 准备好的版本:

$stmt = $mysqli->prepare("INSERT INTO videos (file_name, upload_by, date, path) 
VALUES (?, ?, ?, ?)");
$stmt->bind_param('ssss', $newstring, $id, $date->format('Y-m-d'), $location);
$stmt->execute();

未准备版本:

  $sql = "INSERT INTO videos (file_name, upload_by, date, path) VALUES ('$newstring', '$id', '
          $date', 'Nominator/$location$newstring')";
  mysqli_query($mysqli, $sql);

$stmt-execute();替换为$stmt->execute();

此外,不要在查询中使用 datepath。用其他名称重命名它们,例如 date1path1.

像下面这样更新您的查询肯定会起作用(离线测试):

<?php
$mysqli = new mysqli('localhost', 'root', '', 'test2'); 

if ($mysqli->errno) {
printf("Connect failed: %s\n", $mysqli->error);
exit();
}

$stmt = $mysqli->prepare("INSERT INTO videos (file_name, upload_by, date1, path1) VALUES (?, ?, ?, ?)");
$stmt->bind_param('ssss', $file_name, $upload_by, $date1, $path1);
$date1 = date("Y-m-d");
$file_name = "test.jpg";
$upload_by = "amit";
$path1 = "test";
if ($result = $stmt->execute()){
echo "success";
$stmt->free_result();
} else {
echo "error";
}
$stmt->close();
?>

你绑定了两次你的参数,如果你只使用?,不要再绑定参数直接执行。

 //Prepare your query first
 $stmt = $mysqli->prepare("INSERT INTO videos (file_name, upload_by, date, path) 
    VALUES (?, ?, ?, ?)");

//Just pass your argument and execute directly without binding the parameter (The parameter is binded already)
$stmt->execute('ssss', $newstring, $id, $date->format('Y-m-d'), $location);