尝试获得 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