gpt4 book ai didi

PHP,foreach 奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 00:59:09 25 4
gpt4 key购买 nike

抱歉标题有限。对我放宽点,我的 PHP 水平不是很高。

在我的 functions.php 中,我有以下 2 个函数来查看“接收者”或“发送者”是否已经存在。

function getSenderId($fromAddress){
global $database;
$check = $database->query("SELECT * FROM custMod_senders WHERE email = '$fromAddress'");
if($check->fetchRow() > 0){
$id = $check->fetchRow();
return $id['id'];
}else{
return 0;
}
}

function getReceiverId($toAddress){
global $database;
$check = $database->query("SELECT * FROM custMod_receivers WHERE email = '$toAddress'");
if($check->fetchRow() > 0){
$id = $check->fetchRow();
return $id['id'];
}else{
return 0;
}
}

现在在我的脚本中有以下内容。

$from = $_SESSION['fromAddress'];
$to = $_SESSION['addresses'];
$std = $_SESSION['possibleStd'];

if (!is_array($to)){
$to = array($to);
}



foreach($to as &$address) {

if(getReceiverID($address) == 0){
echo 'receiver not found';
$database->query("INSERT INTO custMod_receivers (email, possibleStd) VALUES ('$address', '$std')");

}

if(getSenderID($from) == 0){
echo 'sender not found';
$database->query("INSERT INTO custMod_senders (email) VALUES ('$from')");

}

$send_id = getSenderID($from);
$receive_id = getReceiverID($address);

$database->query("INSERT INTO custMod_lt_send_rec (send_id, receive_id) VALUES ('$send_id', '$receive_id')");

};

假设我的变量、 session 和表名都存在并且可用。这个循环或函数设置有什么问题?

问题出在 foreach() 中的最后一个查询中。链接表给出了各种疯狂的结果。

编辑:问题是数据库中的结果是双重的、不完整的或缺失的。好像我的 2 个函数给出了错误的结果...

最佳答案

如果您正在使用 mysqli(您应该使用),您的数据库对象可以自动获取 ID。它速度更快(查找次数减少两次)并且即时。

$conn = new mysqli("localhost", "username", "password");
$conn->query("INSERT BLAH BLAH BLAH");

$id_of_new_row = $conn->insert_id;

您可能会看到(正如您在评论中提到的)数据库仍在写入,并且您看到缓存的响应(null)或由于并发废话而导致的其他一些不正确的值。但是,当您可以使用您发布的两个函数获取您正在查找的 ID 时,发送额外的两个查询是没有意义的,所以请将您的 DB 对象切换到此方法并让我们知道它是如何进行的!

关于PHP,foreach 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523392/

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