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

时间:2016-04-06 20:57:43

标签: php mysql mysqli

这是我的代码

$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);

3 个答案:

答案 0 :(得分:1)

如果主表没有匹配的行,那么你所做的只是插入一个待办事项表,你不需要两个语句。

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”可以作为一个cut运算符,因此只有在它找到第一个TRUE时才进行求值。

答案 1 :(得分:0)

表格名称与$mysqli->prepare

中的字段列表之间缺少空格

试试这个:

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

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

  

更新

看起来你的$ mysqli-> prepare正在等待11个变量而你正试图绑定12个

答案 2 :(得分:0)

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

之上