0

我正在建立一个私人消息网络,它似乎没有将它们插入到我指定的表中。消息被发布到表中,然后在不同的脚本中访问。我的查询有什么问题?

   $new_of_id = $_SESSION['user_login'];

  $send_msg = mysql_query("INSERT INTO pvt_messages VALUES   ('','$new_of_id','$username','$msg_title','$msg_body','$date','$opened','$deleted')");
       echo "Your message has been sent!";
        }
      }
    echo "

    <form action='send_msg.php?u=$username' method='POST'>
    <h2>Compose a Message: ($username)</h2>
    <input type='text' name='msg_title' size='30' onClick=\"value=''\" value='Enter the message title here ...'><p />
    <textarea cols='50' rows='12' name='msg_body'>Enter the message you wish to send ...</textarea><p />
    <input type='submit' name='submit' value='Send Message'>
    </form>

    ";
    }
4

2 回答 2

3

这里有几件事。

您的代码不处理失败的可能性。

目前,您发布成功消息时未检查 INSERT 查询的返回值。您可以通过在打印消息之前检查 $send_msg 的值来解决此问题:

$send_msg = mysql_query("
    INSERT INTO pvt_messages 
    VALUES(
        '',
        '$new_of_id',
        '$username',
        '$msg_title',
        '$msg_body',
        '$date',
        '$opened',
        '$deleted'
    )
");

//$send_msg will be TRUE if the row was inserted. FALSE if it wasn't.
if($send_msg){
    echo "Your message has been sent!";
}
else{
    echo "We were unable to send your message!";
}

您没有正确调试查询。

通过使用 trigger_error (mysql_error() 像这样:

$send_msg = mysql_query("
    INSERT INTO pvt_messages 
    VALUES(
        '',
        '$new_of_id',
        '$username',
        '$msg_title',
        '$msg_body',
        '$date',
        '$opened',
        '$deleted'
    )
") or trigger_error(mysql_error());

...任何阻止您的 INSERT 正常运行的 MySQL 错误都将被吐出到页面上。这样,您可以消除任何语法错误等等。我的猜测是您正在尝试将空字符串插入主键列。

mysql_* 函数:

请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2012-11-15T20:59:58.220 回答
0

尝试这样的事情 - 只是为了检查你是否弄乱了列字段(可能是一个可能的原因)

$send_msg = mysql_query("
    INSERT INTO pvt_messages (
         id,
         name
         )
    VALUES(
        '',
        '$name'
    )
");
于 2012-11-15T21:26:02.240 回答