抱歉有限的标题。对我来说很容易,我在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')");
};
鉴于我的vars,session和tablenames都存在且可用..这个循环或函数设置有什么问题?
问题出在foreach()中的最后一个查询中。链接表给出了各种疯狂的结果。
编辑:问题是数据库中的结果是双重,不完整或缺失。好像我的2个函数给出了错误的结果......
答案 0 :(得分:1)
如果您正在使用mysqli(您应该使用),您的数据库对象可以自动获取ID。它更快(少了两次查找)并且瞬间完成。
$conn = new mysqli("localhost", "username", "password");
$conn->query("INSERT BLAH BLAH BLAH");
$id_of_new_row = $conn->insert_id;
您可能会看到的内容(正如您在评论中提到的那样)是数据库仍处于写入状态,并且由于并发废话,您会看到缓存的响应(null)或其他一些不正确的值。如果您只是使用发布的两个函数获取正在查找的ID,那么发送额外的两个查询是没有意义的,所以将数据库对象切换到此方法并让我们知道它是如何进行的! / p>
答案 1 :(得分:0)
;
最后不需要。究竟是什么价值搞砸了?
编辑:
如果from不是数组,这应该会减少不必要的查询次数。
$send_id = getSenderID($from);
if(getSenderID($from) == 0){
echo 'sender not found';
$database->query("INSERT INTO custMod_senders (email) VALUES ('$from')");
$send_id = $from;
}
foreach($to as $address){
$receive_id = getReceiverID($address);
if($receive_id == 0){
echo 'receiver not found';
$database->query("INSERT INTO custMod_receivers (email, possibleStd) VALUES ('$address', '$std')");
$receive_id = $address;
}
$database->query("INSERT INTO custMod_lt_send_rec (send_id, receive_id) VALUES ('$send_id', '$receive_id')");
}
答案 2 :(得分:0)
有一点肯定看起来很奇怪的是,当没有地址时,你将$地址添加到数据库,而没有来自的地方则是$。
您的结构采用详细的伪代码,以帮助您理解:
if there is no receiver 1
then put the receiver intoto the database 2
if there is no sender 3
then put the sender into the database 4
anyway 5
put both in the database 6
因此,如果其中一个元素存在,则在db(第6行)中复制它;如果没有设置,它会在数据库中放入空字符串 - 因为第6行中的命令无论如何都会被执行
这看起来不像你想做的事,amirite?
所以,这是一系列条件句应该如何 - 如果我找到你的话:
if ((getSenderID($from)) and (getReceiverID($address)) {
//code to put both into the db
}
elseif ((getSenderID($from)) {
//code to put the sender only
}
else {
//code to put the receiver only
}
另外,您可能需要查看条件语句的一些php手册。