繁体   English   中英

无法在同一个 PHP 文件中执行第二个 MYSQLI 查询

[英]Can't execute second MYSQLI query in same PHP file

这是我的代码

$stmt = $mysqli->prepare("SELECT * FROM `accountsToDo` WHERE `OKrname` = ?");
    $stmt->bind_param("s", $OKCUsername);

    /* execute prepared statement */
    $stmt->execute();

if ($stmt->affected_rows > 0){
    echo "Exists";
} else {
    $stmt = $mysqli->prepare("INSERT INTO `accountsToDo`(`percentageOfMessages`, `RemoveDeletedAccounts`, `RemoveNoReply`, `RemoveNoResponse`, `minMatchPercent`, `minDistance`, `maxDistance`, `blacklistUsernames`, `userEmail`, `OKrname`, `OKword`) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
    $stmt->bind_param("iiiiiiissss", $percentageOfMessages, $RemoveDeletedAccounts, $RemoveNoReply, $RemoveNoResponse, $minMatchPercent, $minDistance, $maxDistance, $blacklistUsernames, $userEmail, $OKrname, $OKword);

    $stmt->execute();
}


/* close statement and connection */
$stmt->close();

/* close connection */
$mysqli->close();

但现在我收到错误,

在第 147 行调用 boolean 上的成员函数 bind_param()。

第 147 行是

$stmt->bind_param("iiiiiiissss", $percentageOfMessages, $RemoveDeletedAccounts, $RemoveNoReply, $RemoveNoResponse, $minMatchPercent, $minDistance, $maxDistance, $blacklistUsernames, $userEmail, $OKrname, $OKword);

如果您所做的只是在主表没有匹配行的情况下插入到待办事项表中,那么您不需要两个语句。

INSERT INTO `accountsToDo` 
        (`percentageOfMessages`, `RemoveDeletedAccounts`, 
          `RemoveNoReply`, `RemoveNoResponse`, `minMatchPercent`, 
          `minDistance`, `maxDistance`, `blacklistUsernames`, 
          `userEmail`, `OKrname`, `OKword`) 
VALUES (?,?,?,?,?,?,?,?,?,?,?)
WHERE NOT EXISTS (SELECT 1 FROM `accountsToDo` WHERE `OKrname` = ?);

绑定你的参数,你就保存了对数据库的调用。 这样做的优点是“SELECT 1”充当剪切运算符,因此仅在找到第一个 TRUE 之前对其进行评估。

您在$mysqli->prepare中缺少表名和字段列表之间的空格

尝试这个:

$stmt = $mysqli->prepare("INSERT INTO `accountsToDo` 
                        (`percentageOfMessages`,`RemoveDeletedAccounts`, 
                         `RemoveNoReply`, `RemoveNoResponse`, 
                         `minMatchPercent`, `minDistance`, 
                         `maxDistance`, `blacklistUsernames`, 
                         `userEmail`, `OKrname`, `OKword`) 
                         VALUES (?,?,?,?,?,?,?,?,?,?,?)");

根据手册$mysqli->prepare 将返回FALSE如果语句导致错误

更新

看起来您的 $mysqli->prepare 需要 11 个变量,而您正在尝试绑定 12 个

问题是我没有$stmt->store_result(); 在第一个$stmt->execute();之上$stmt->execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM