尝试获得 php 准备使用两个不同的表
Attempt to get a php prepare to work with two different tables
我正在尝试执行我的第一个查询,我将发送到两个不同的数据库 table。我正在尝试更新用户中的 'group' 和 user_request table。我从 AJAX 调用中获得一个 ID,我正在使用该 ID 查找我要更新的记录。
在用户table id 中需要找到id 字段。
在 user_requests table 中,id 需要与 user_id.
相关联
这是我要更改的行,以便将其发送到两个不同的数据库 tables..
$stmt = $con->prepare("UPDATE users,user_reuqests SET `group`=? WHERE id, user_id=?");
我收到一个错误响应,说错误出在 user_id 部分。
$approved_id = $_POST['id'];
$change_group = $_POST['update_group'];
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("UPDATE users,user_reuqests SET `group`=? WHERE id, user_id=?");
if ( !$stmt || $con->error ) {
// Check Errors for prepare
die('User Group update prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$stmt->bind_param('ii', $change_group, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
if(!$stmt->execute()) {
die('User Group update execute() failed: ' . htmlspecialchars($stmt->error));
}
我做错了什么不能让它工作和连接?
更新:在我更改了它的准备部分之后,我现在在准备好的语句的 bind_param 部分中遇到了错误。我该如何更改?
$stmt = $con->prepare("UPDATE users,user_requests SET users.group=?, user_requests.group=? WHERE users.id=? AND user_requests.user_id=?");
你的语法有问题:
WHERE id, user_id=?
应该是这样的:
WHERE id = ? AND user_id = ?
首先,您查询中的 WHERE 子句没有为第一个约束指定 id。
其次,group
有歧义,当您尝试更新它时会导致错误。
您的查询应为:UPDATE users,user_reuqests SET users.group=?, user_request.group=? WHERE users.id=? AND user_request.user_id=?
现在,由于我们用更多的占位符更新了查询,我们需要将这些额外的占位符绑定到 PHP 变量。新查询同时使用 $change_group
和 $approved_id
两次 - 所以我们需要将它们分别绑定两次。
if(!$stmt->bind_param('iiii', $change_group, $change_group, $approved_id, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
总而言之,最终代码应如下所示:
$approved_id = $_POST['id'];
$change_group = $_POST['update_group'];
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("UPDATE users,user_reuqests SET users.group=?, user_request.group=? WHERE users.id=? AND user_request.user_id=?");
if ( !$stmt || $con->error ) {
// Check Errors for prepare
die('User Group update prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$stmt->bind_param('iiii', $change_group, $change_group, $approved_id, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
if(!$stmt->execute()) {
die('User Group update execute() failed: ' . htmlspecialchars($stmt->error));
}
更多关于将参数绑定到 mysqli_stmt 的信息:http://php.net/manual/en/mysqli-stmt.bind-param.php
我正在尝试执行我的第一个查询,我将发送到两个不同的数据库 table。我正在尝试更新用户中的 'group' 和 user_request table。我从 AJAX 调用中获得一个 ID,我正在使用该 ID 查找我要更新的记录。
在用户table id 中需要找到id 字段。 在 user_requests table 中,id 需要与 user_id.
相关联这是我要更改的行,以便将其发送到两个不同的数据库 tables..
$stmt = $con->prepare("UPDATE users,user_reuqests SET `group`=? WHERE id, user_id=?");
我收到一个错误响应,说错误出在 user_id 部分。
$approved_id = $_POST['id'];
$change_group = $_POST['update_group'];
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("UPDATE users,user_reuqests SET `group`=? WHERE id, user_id=?");
if ( !$stmt || $con->error ) {
// Check Errors for prepare
die('User Group update prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$stmt->bind_param('ii', $change_group, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
if(!$stmt->execute()) {
die('User Group update execute() failed: ' . htmlspecialchars($stmt->error));
}
我做错了什么不能让它工作和连接?
更新:在我更改了它的准备部分之后,我现在在准备好的语句的 bind_param 部分中遇到了错误。我该如何更改?
$stmt = $con->prepare("UPDATE users,user_requests SET users.group=?, user_requests.group=? WHERE users.id=? AND user_requests.user_id=?");
你的语法有问题:
WHERE id, user_id=?
应该是这样的:
WHERE id = ? AND user_id = ?
首先,您查询中的 WHERE 子句没有为第一个约束指定 id。
其次,group
有歧义,当您尝试更新它时会导致错误。
您的查询应为:UPDATE users,user_reuqests SET users.group=?, user_request.group=? WHERE users.id=? AND user_request.user_id=?
现在,由于我们用更多的占位符更新了查询,我们需要将这些额外的占位符绑定到 PHP 变量。新查询同时使用 $change_group
和 $approved_id
两次 - 所以我们需要将它们分别绑定两次。
if(!$stmt->bind_param('iiii', $change_group, $change_group, $approved_id, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
总而言之,最终代码应如下所示:
$approved_id = $_POST['id'];
$change_group = $_POST['update_group'];
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("UPDATE users,user_reuqests SET users.group=?, user_request.group=? WHERE users.id=? AND user_request.user_id=?");
if ( !$stmt || $con->error ) {
// Check Errors for prepare
die('User Group update prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$stmt->bind_param('iiii', $change_group, $change_group, $approved_id, $approved_id)) {
// Check errors for binding parameters
die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
if(!$stmt->execute()) {
die('User Group update execute() failed: ' . htmlspecialchars($stmt->error));
}
更多关于将参数绑定到 mysqli_stmt 的信息:http://php.net/manual/en/mysqli-stmt.bind-param.php