gpt4 book ai didi

php - MYSQL 结果没有正确返回

转载 作者:可可西里 更新时间:2023-11-01 07:27:18 25 4
gpt4 key购买 nike

所以我有一段代码可以检查您是否关注了某个用户。如果您还没有,基本上让您关注他们。所以这里是

if($_SESSION['loggedIn'] == true){
$result = $con->prepare("SELECT * FROM followers WHERE follow_from = :username AND follow_to = :post_id");
$result->bindParam(':username', $username);
$result->bindParam(':post_id', $follower);
$result->execute();
$reprint = $result->fetchAll(PDO::FETCH_ASSOC);
}
print_r($reprint);
if($reprint < 1){
$stmt = $con->prepare("INSERT INTO followers (follow_from, follow_to) VALUES (:ff, :ft)");
$stmt->bindValue(':ff', $follower, PDO::PARAM_STR);
$stmt->bindValue(':ft', $username, PDO::PARAM_STR);
$stmt->execute();
}
else{
echo 'Error';
exit();
}
//Display follower
$stmt1 = $con->prepare("SELECT COUNT(*) AS count FROM followers WHERE follow_to = :username");
$stmt1->bindValue(':username', $username, PDO::PARAM_STR);
$stmt1->execute();
$likes = $stmt1->fetchAll(PDO::FETCH_ASSOC);
print_r($likes);

所以当我运行它一次时。我得到了 else 声明的回应。我的问题是为什么会这样?在数据库中我没有记录,所以我希望它能进入一次。我完全没有错误。 loggedIn 为真。并且变量正在成功传递。有任何想法吗?

最佳答案

您滥用了从 fetchAll() 获得的结果。它是一个关联数组,而不是标量值。正如您可能已经猜到的那样,它可能是空的。

但是,更重要的是,您的代码具有潜在的竞争条件。如果两个不同的 session 试图设置相同的 followers 行会怎样? (诚​​然,在小型系统中这不太可能发生,但在大型系统中它可能会发生)。

您实际上所做的只是INSERT 操作。如果您的 followers 行在 (follow_from,follow_to) 列上有一个唯一键,那么,如果该行已经存在,您将得到一个 'Duplicate entry ' INSERT 错误。否则它只会发生。您可以忽略 'Duplicate entry' 错误,因为您想要的只是将该行放入该表中。

所以你的代码应该是这样的:

$stmt = $con->prepare("INSERT 
INTO followers (follow_from, follow_to)
VALUES (:ff, :ft)");
$stmt->bindValue(':ff', $follower, PDO::PARAM_STR);
$stmt->bindValue(':ft', $username, PDO::PARAM_STR);
$result = $stmt->execute();
if ($result) {
/* this follow pair was successfully added */
} else {
/* MySQL may return the error 'Duplicate entry' */
if (false == stripos($stmt->errorCode,'Duplicate')){
echo 'Something failed in the insert: ' . '$stmt->errorCode';
}
else {
/* this follow pair was already in your table */
}
}

专业提示:不要在软件中使用SELECT *;它会扰乱查询优化;它通常会从服务器向您的程序发送比您需要的更多的数据,并且如果您更改表定义,它会使您的程序的弹性降低。

专业提示:如果您必须计算与特定 WHERE 语句匹配的行,请使用 COUNT() 而不是获取行并在客户端中计算它们。如果你得到一百万行怎么办?

关于php - MYSQL 结果没有正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24489987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com