为什么在这种情况下不更新mysql数据库?

时间:2011-07-27 13:05:22

标签: php mysql if-statement pdo str-replace

我有这个PHP脚本:

require_once('global.php'); //connects to db and various functions used
//select the user's information
$statement = $db->prepare("SELECT * FROM user WHERE id=1");
$statement->execute();
$result = $statement->fetchObject();
//get the chat
$string = $result->chats;

$from = $_REQUEST['from'];
$msg = $_REQUEST['msg'];
$sent = $_REQUEST['sent'];

//see what we should do with the recieved data
if($string == "") {
    //there isnt any chats right now, we must add the first ever contact
    $string = "<ResultSet><chats><chat><messages><sms><from>{$from}</from><msg>{$msg}</msg><sent>{$sent}</sent></sms></messages><contact>{$from}</contact></chat></chats></ResultSet>";
    //send the data back to the user's row in the database
    $statement = $db->prepare("UPDATE user SET chats='{$string}' WHERE id=1");
    $statement->execute();
} else if($from == $result->name) {
    //the user is sending a message to a contact. we now need to get the "to" value.
    $to = trim(str_replace("_", " ", $_REQUEST['to']));
    //add the sms to the contact's chat
    $string = str_replace("</sms></messages><contact>{$to}</contact>", "</sms><sms><from>{$from}</from><msg>{$msg}</msg><sent>{$sent}</sent></sms></messages><contact>{$to}</contact>", $string);
    //send the data back to the user's row in the database
    $statement = $db->prepare("UPDATE user SET chats='{$string}' WHERE id=1");
    $statement->execute();
} else if(strstr($string, "<contact>".$from."</contact>")) {
    //The contact that sent the message already exists in this user's row, add the message to the contact's chat
    $string = str_replace("</sms></messages><contact>{$from}</contact>", "</sms><sms><from>{$from}</from><msg>{$msg}</msg><sent>{$sent}</sent></sms></messages><contact>{$from}</contact>", $string);
    //send the data back to the user's row in the database
    $statement = $db->prepare("UPDATE user SET chats='{$string}' WHERE id=1");
    $statement->execute();
} else {
    //Person who sent the message doesnt exist in the chats, add him.
    $string = str_replace("</chats>", "<chat><messages><sms><from>{$from}</from><msg>{$msg}</msg><sent>{$sent}</sent></sms></messages><contact>{$from}</contact></chat></chats>", $string);
    //send the data back to the user's row in the database
    $statement = $db->prepare("UPDATE user SET chats='{$string}' WHERE id=1");
    $statement->execute();
}

问题在于其他代码:

else if($from == $result->name) {
//the user is sending a message to a contact. we now need to get the "to" value.
$to = trim(str_replace("_", " ", $_REQUEST['to']));
//add the sms to the contact's chat
$string = str_replace("</sms></messages><contact>{$to}</contact>", "</sms><sms><from>{$from}</from><msg>{$msg}</msg><sent>{$sent}</sent></sms></messages><contact>{$to}</contact>", $string);
//send the data back to the user's row in the database
$statement = $db->prepare("UPDATE user SET chats='{$string}' WHERE id=1");
$statement->execute();
}

我确信代码正在通过其他代码运行,我已经回应并确认了。当我使用$ string = str_replace()时,我打印了$ string,它确实被替换了。但是当我将数据提交到数据库中的行时,当我刷新数据库时没有任何反应。为什么它对其他的不起作用,但对于if语句的其余部分(以及之前的if)呢?

对我来说没有意义。代码我尽力适当地评论它,如果你需要解释的东西只是问。

2 个答案:

答案 0 :(得分:1)

如果$ db不是MySQLi或PDO的实例而是db包装器,请查看实例化为$ db的类,并确保它不会启动事务。如果启动了事务,则需要提交事务,以便应用/保存对数据库的更改。

答案 1 :(得分:0)

我不知道为什么但我必须更改我的代码所以我会在execute函数中而不是在查询中发送变量。在查询中我会把“?”我想要变量的地方,在execute()函数中,我会放置一个像

这样的数组
$statement->execute(array($string, 1));

这似乎解决了我的问题。