1

嗨,这个代码可以完美地使用价值:

    <script type="text/javascript">
    $(document).ready(function() {
    $("input[type=button]").click(function () {
    var textarea_content = $('textarea#wall').val(); // get the content of what user typed    (in textarea) 
    if (textarea_content != '') { // if textarea is not empty 
    var sender =  "<?php echo $_SESSION['user_id'];?>";

     $.ajax({
            type: "POST",
            url: "send_message_function.php",
            data : "action=send&from_id="+sender+"&to_user="+$(this).siblings("input[type=text]").val()+"&message="+textarea_content,
            dataType: "json",
            success: function (data) {
               var  LastID = data["cid"];
               alert("toUser: " + $(this).siblings("input[type=text]").val()+"and text area " + textarea_content + " message id: " + LastID);
                                     }
        });//end success function

        //do something else

        } else {
        alert('Enter some text ! '); // just in case somebody click on share witout writing anything :)
    }
    });//end click function
    });//end ready function
    </script>

和 send_message_function.php :

<?php
 require 'core/functions/init.php';

 $action  = $_POST['action'];
 if($action=="send"){
 $from_id = mysql_real_escape_string($_POST['from_id']);
 $to_id = mysql_real_escape_string($_POST['to_user']);
 $message = strip_tags($_POST['message']);

 $sql = mysql_query("INSERT INTO chat (from_id, to_id, message,   dt)VALUES('$from_id','$to_id','$message',NOW())") or die("0");

 echo json_encode(array("cid"=>(mysql_insert_id()),
                               "from_id"=>''.$message_id.''));
}
    ?>

问题是当我尝试将消息发送给多个用户时。sql 查询尝试在同一行中插入所有用户 ID。我知道我应该做一些循环,但我想不出如何为我想向其发送消息的每个用户运行查询。

$(this).siblings("input[type=text]").val()      

像这样返回多个用户 ID:113,143,234

4

4 回答 4

1

您不需要循环,只需一个查询即可进行多次插入,如下所示:

 $to_id = explode(',', mysql_real_escape_string($_POST['to_user'])); //split the string to an array containing each id

 $sql = mysql_query("INSERT INTO chat (from_id, to_id, message, dt) VALUES('$from_id','$to_id[0]','$message',NOW()), ('$from_id','$to_id[1]','$message',NOW()), ('$from_id','$to_id[2]','$message',NOW()) ") or die("0");

注意:$from_id不应该是主键,否则会出现重复键错误。

编辑:如果你不知道没有。的用户,

   $to_id = explode(',', mysql_real_escape_string($_POST['to_user']));

   foreach ($to_id as $v)
     $sql = mysql_query("INSERT INTO chat (from_id, to_id, message, dt) VALUES('$from_id','$v','$message',NOW()) ") or die("0");
于 2012-09-28T14:56:35.080 回答
1

要在一个 SQL 查询中插入多行,请执行以下操作

INSERT INTO foo(a, b) VALUES('c', 'd'), ('e', 'f'), ('h', 'i');

您需要循环构建每个 VALUES 集,但您可以在单个查询中进行插入。

所以像

<?php
    $to_id = explode(',', mysql_real_escape_string($_POST['to_user']));

    $sql = 'INSERT INTO chat (from_id, to_id, message) VALUES';
    foreach ($to_id as $id)
    {
        $sql .="('$from_id', '$id', '$message'),";
    }
    rtrim($sql, ','); //strip the final comma
?>

这应该形成一个查询

INSERT INTO chat(from_id, to_id, message) VALUES('1', '2', 'hello from php'), ('1', '3', 'hello from php'), ('1', '4', 'hello from php')

这样做意味着只发送一个查询:因此与数据库通信的开销更少,这将加快您的脚本。

于 2012-09-28T14:55:19.150 回答
1

您需要将用户 ID 字符串拆分为逗号字符,然后对创建的每个值执行查询。

于 2012-09-28T14:54:43.583 回答
0
$toIDS = explode(',', mysql_real_escape_string($_POST['to_user']));
foreach($toIDS as $ID){
    $query=mysql_query("INSERT INTO foo(a, b) VALUES('c', 'd')");
    echo (mysql_affected_rows()>0)?$ID .'INSERTED':$ID.' NOT INSERTED';
}
于 2012-09-28T14:59:20.507 回答