Php 查询未发送
我正试图在已经准备好的语句之后再创建一个准备好的语句。我得到一个错误,说变量的数量不匹配。我认为这是因为“准备”部分中的“日期要求”。我已经在另一个查询中这样做了,它没有抛出错误。我不确定这是否是导致代码中断的原因,但这并没有发送第二个查询的任何内容。第一个仍然是罚款 警告:mysqli_stmt::bind_param:变量数量与第137行/home4/pfarley1/public_html/sundayfundayleague.com/register.php中准备好的语句中的参数数量不匹配 第137行是Php 查询未发送,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我正试图在已经准备好的语句之后再创建一个准备好的语句。我得到一个错误,说变量的数量不匹配。我认为这是因为“准备”部分中的“日期要求”。我已经在另一个查询中这样做了,它没有抛出错误。我不确定这是否是导致代码中断的原因,但这并没有发送第二个查询的任何内容。第一个仍然是罚款 警告:mysqli_stmt::bind_param:变量数量与第137行/home4/pfarley1/public_html/sundayfundayleague.com/register.php中准备好的语句中的参数数量不匹
$stmt->bind_param('iisssssi', $id, $user_id, $firstname, $lastname, $email, $username, $status, $group);
这是我在页面上的两个查询的代码。第一个很好用,但是第二个我就犯了这个错误
if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$firstname = Input::get('firstname');
$payment_name = "Owes";
$payment_id = 1;
$payment_amount = 0;
//Query to add user's name to owes db table
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("INSERT INTO payment_status
(id, user_id, firstname, payment_name, payment_id, payment_amount)
VALUES
(?, ?, ?, ?, ?, ?)");
if ( false===$stmt ) {
// Check Errors for prepare
die(' Owes DB prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iissii', $id, $user_id,
$firstname, $payment_name,
$payment_id, $payment_amount);
if ( false===$stmt ) {
// Check errors for binding parameters
die('Owes DB bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
if ( false===$stmt ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
}
//Query that adds user to User Request db table
if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
$firstname = Input::get('firstname');
$lastname = Input::get('lastname');
$email = Input::get('email');
$username = Input::get('username');
$status = "Pending";
$group = 1;
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt2 = $con->prepare("INSERT INTO user_requests
(id, user_id, firstname, lastname, email, username, status, `group`, date_requested)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())");
if ( false===$stmt2 ) {
// Check Errors for prepare
die('User Request prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iisssssi', $id,
$user_id, $firstname, $lastname, $email,
$username, $status, $group);
if ( false===$stmt2 ) {
// Check errors for binding parameters
die('User Request bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
if ( false===$stmt2 ) {
die('User Request execute() failed: ' . htmlspecialchars($stmt->error));
}
}
有人知道我做错了什么吗
像这样
if (!$stmt2->bind_param('iisssssi', $id, $user_id, $firstname, $lastname, $email, $username, $status, $group) {
die('User Request bind_param() failed...);
// Check errors for binding parameters
die('User Request bind_param() failed: ' . htmlspecialchars($stmt->error));
}
这是一个打字错误或复制/粘贴错误。在第二条语句中,使用变量$stmt2,但在$stmt->bind_param,$stmt->execute上调用bind_param。其他一切看起来都是正确的。请注意,在bind_参数之后检查iffalse===$stmt2,execute调用将无法正常工作。在这些情况下,$stmt2中的对象永远不会设置为false,但方法调用将返回false。相反,检查它就像$stmt->绑定参数。。。{die'User Request bind_param失败了…;executeThanks的帮助也失败了!我不敢相信我漏掉了。我用你建议的更新了我的问题…在底部。我会这样构造它吗?是的,这是确切的想法,但我想你漏掉了if.bind_param和execute的结尾都返回false,但两者都没有返回false能够修改变量$stmt2使其为false。