我正在使用mysqli_prepare()所以我总是得到这个错误。
警告:mysqli_stmt :: bind_param():变量数不匹配 第12行download.php中预准备语句中的参数数量
致命错误:带有消息的未捕获异常'mysqli_sql_exception' '没有为准备好的声明中的参数提供数据' *** gg.php:13堆栈跟踪:#0 \ download.php(13):mysqli_stmt-> execute()#1
包含('。')#2 {main}抛出
第13行download.php
我查了解其他问题,但我没有设法得到解决方案。
我的代码:
if(isset($_GET['cert_id'])){
$cert_id = $_GET['cert_id'];
$stmt1 = mysqli_prepare($connection,"SELECT cert_id,certificate_id,name_student,hours_com,course_title FROM cert JOIN courses WHERE cert_id = ? AND course_id = certificate_id");
$stmt1->bind_param("iisss",$cert_id,$certificate_id,$name_student,$hours_com,$course_title);
$stmt1->execute();
while(mysqli_stmt_fetch($stmt1))
{
$pdf = new \setasign\Fpdi\Fpdi();
$pdf->addPage('L');
$pagecount = $pdf->setSourceFile('cert.pdf');
$tplIdx = $pdf->importPage(1);
$pdf->useTemplate($tplIdx);
$pdf->SetY(-120);
$pdf->SetX(35);
$pdf->SetFont('times', 'B', 35);
$pdf->cell(20, 10,$name_student, 'C');
$pdf->SetY(-135);
$pdf->SetX(135);
$pdf->SetFont('times', 'B', 35);
$pdf->cell(90, 100, $course_title, 'C');
$pdf->SetY(151);
$pdf->SetX(200);
$pdf->AddFont('BOOKOSBI','','BOOKOSBI.php');
$pdf->SetFont('BOOKOSBI','',25);
$pdf->cell(40, 10, $hours_com 'C');
}
$pdf->Output('certnew.pdf','D');
}
第12行& 13:
$stmt1->bind_param("iisss",$cert_id,$certificate_id,$name_student,$hours_com,$course_title);
$stmt1->execute();
知道这里有什么问题吗?
答案 0 :(得分:1)
您的查询中的问号是您稍后要添加的值的占位符。它们的数量需要与您要绑定的参数数量相匹配 - 价值来自的地方。但是,在您的示例中,您有一个问号,但之后您尝试绑定五个参数:
$stmt1 = mysqli_prepare(
$connection,
"SELECT ... FROM cert JOIN courses WHERE cert_id = ? AND course_id = certificate_id"
);
$stmt1->bind_param(
"iisss",
$cert_id, certificate_id, $name_student, $hours_com, $course_title
);
你似乎想要这个:
$stmt1->bind_param("i",$cert_id);