mysqli bind_param和受影响的行错误


mysqli bind_param and affected rows error

我是mysqli的新手,我看过PHP手册等等,什么都不管用。我不太确定出了什么问题。我一直收到这个错误:

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in C:'xampp'htdocs'new1'template.php on line 165

和这个

Warning: mysqli_stmt_affected_rows() [function.mysqli-stmt-affected-rows]: Couldn't fetch mysqli_stmt in C:'xampp'htdocs'new1'template.php on line 190

编码

$query = "INSERT INTO pets (name, age, gender, dob, breed_type, breed1, breed2, color, spay, size, hair_length, vaccine, vaccinated, dewormed, adoption_fees, aboutpet, petpic1, petpic2, petpic3) VALUES ('?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?')";
// PREPARE QUERY TO BE EXECUTED.
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sssssssssssssssssss",$petname, $petage, $petgender, $petdob, $petbreedtype, $petbreed1, $petbreed2, $petcolor, $petspay, $petsize, $pethair, $petvaccine, $petvaccineamount, $petdewormed, $petadoptfees, $aboutpet, $target_path, $target_path1, $target_path2 );
$petname  = $_POST['petname'];
$petage   = $_POST['petage'];
$petgender = $_POST['petgender'];
$petdob = $_POST['petdob'];
$petbreedtype = $_POST['petbreedtype'];
$petbreed1 = $_POST['petbreed1'];
$petbreed2 = $_POST['petbreed2'];
$petcolor = $_POST['petcolor'];
$petspay = $_POST['petspay'];
$petsize = $_POST['petsize'];
$pethair = $_POST['pethair'];
$petvaccine = $_POST['petvaccine'];
$petvaccineamount = $_POST['petvaccineamount'];
$petdewormed = $_POST['petdewormed'];
$petadoptfees = $_POST['petadoptfees'];
$aboutpet = $_POST['aboutpet'];
//EXECUTE QUERY
$stmt->execute();
//CLOSE EXECUTE
$stmt->close();
$rowcount = mysqli_stmt_affected_rows($stmt);
if ($rowcount > 0)
{
echo "<div class='noerror'>Form has been submitted successfully!</div>";
}

请帮帮我,我现在完全迷路了。

您不能引用?占位符:这样做会导致它们被解析为字符串文本,而不是占位符。

因此:

$query = "
  INSERT INTO pets (
    name, age, gender, dob, breed_type, breed1, breed2, color, spay, size,
    hair_length, vaccine, vaccinated, dewormed, adoption_fees, aboutpet,
    petpic1, petpic2, petpic3
  ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
";

"?"的数目s与使用bind_param放入的变量数量不匹配。你做了计数,但有某种差异。

编辑:您还应该在bind_param中使用$_POST['param']。不要在新的变量中注入所有$_POST[变量]。

第2版:阅读有关规范化的内容。

首先-在引用$_POST变量后提取它们-您需要移动$_POST变量下方的"$stmt->bind_param"行

第二,你不需要在你的"?"周围加引号变量-如果你这样做,它会把它们当作字符串,而不是绑定参数