简体   繁体   English

选择之后和之前在MySQL中使用MySql在相同的结果上插入结果

[英]Select after and before Insert results on same in PHP with MySql

Good evening, I have a problem when i select some data from table. 晚上好,我从表中选择一些数据时遇到问题。 So, first, i call a select that return the last row of the table. 因此,首先,我调用一个select方法,该方法返回表的最后一行。 After this, i insert new data in that table, and now call that select again and give me the same result of the first select. 此后,我在该表中插入新数据,现在再次调用该选择,并给我与第一次选择相同的结果。 What i want is, when i insert, the last select returns the data inserted. 我想要的是,当我插入时,最后一个选择将返回插入的数据。 If i execute another select already give me the last value inserted. 如果我执行另一个选择,已经给我最后插入的值。 My code is written in PHP and i use the interface mysqli. 我的代码是用PHP编写的,并且使用mysqli接口。 I already use transactions, refresh, set the cahce of mysqli to 0 in php.ini. 我已经在使用事务,刷新,在php.ini中将mysqli的cahce设置为0。 Thanks. 谢谢。

EDITED 2 : I make a test: 编辑2 :我进行测试:

<?php
include 'conf.php';

$query="INSERT INTO assinante.comentarios (id_cmnt,id_user,comentario,now_data) values (null,4,'coiso',NOW());";
$res=  mysqli_query($link,$query);

$query="SELECT * FROM $db_assin.comentarios;";
$res=  mysqli_query($link,$query);
$linha = mysqli_fetch_assoc($res);
print_r($linha);

$query="INSERT INTO assinante.comentarios (id_cmnt,id_user,comentario,now_data) values (null,3,'ola',NOW());";
$res=  mysqli_query($link,$query);

$query="SELECT * FROM $db_assin.comentarios;";
$res=  mysqli_query($link,$query);
$linha = mysqli_fetch_assoc($res);
print_r($linha);

And it return: 它返回:

Array ( [id_cmnt] => 29 [id_user] => 3 [comentario] => coiso [now_data] => 2014-01-29 02:10:24 ) Array ( [id_cmnt] => 29 [id_user] => 3 [comentario] => coiso [now_data] => 2014-01-29 02:10:24 )

It seems that save in buffer or something like this. 似乎保存在缓冲区或类似的东西。 If you can help i appreciate. 如果您能帮助我,我感激不尽。

EDITED : The code 编辑 :代码

function getComentarios(){
    include 'conf.php';
    $query = 
    "   SELECT  utili.username, cmnt.comentario , cmnt.now_data , cmnt.id_cmnt
        FROM ".$db_assin.".comentarios cmnt, ".$db_assin.".utilizadores utili
        WHERE utili.id_user = cmnt.id_user
        ORDER BY cmnt.id_cmnt DESC
        LIMIT 1;"; 
    $resultado = mysqli_query($link,$query);
    if($resultado){
        $linha = mysqli_fetch_array($resultado);
        $json = json_encode($linha);
        echo $json;
    }
    else{
        echo mysqli_error($link);
    }
        mysqli_free_result($resultado);
}

function ins_comment($id_user,$comment){
    include 'conf.php';
    $data = date('Y-m-d H:i:s');
    mysqli_autocommit($link, FALSE);
    mysqli_query($link,"BEGIN");
    $query_ins = "INSERT INTO ".$db_assin.".comentarios (id_cmnt,id_user,comentario,now_data) "
            . "values (null,$id_user,'$comment',NOW());";
    if (!$res_ins = mysqli_query($link,$query_ins)){
        echo mysqli_error ($link);
        mysqli_rollback($link);
    }
    else{
        mysqli_commit($link);
    }
    mysqli_autocommit($link, TRUE);
    mysqli_refresh($link, MYSQLI_REFRESH_HOSTS);
    return $res_ins;
}

function comentar(){
    include 'conf.php';
    $user_c=$_POST['user_c'];
    $comment=$_POST['comment'];
    $query =  "SELECT u.id_user "
            . "FROM ".$db_assin.".utilizadores u "
            . "WHERE u.username='$user_c';";
    if($resultado = mysqli_query($link, $query)){
        if (($linha = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) != NULL){
            $id_user=$linha['id_user'];
            $query =  "SELECT c.comentario "
            . "FROM ".$db_assin.".utilizadores u, ".$db_assin.".comentarios c "
            . "WHERE u.id_user=c.id_user AND u.id_user='$id_user';";
            if($resultado = mysqli_query($link, $query)){
                if (($linha = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) != NULL){
                    if(strcmp($linha['comentario'],$comment)!=0){
                        if($res=ins_comment($id_user, $comment))
                                echo "Comentário submetido";
                    }
                    else{
                        echo "O mesmo comentário não pode ser submetido duas vezes!";
                    }
                }
                else{
                    if($res=ins_comment($id_user, $comment))
                        echo "Comentário submetido";
                }
            }
        }
        mysqli_free_result($resultado);
    }
    else echo mysqli_error($link);
}

Your second query doesn't have an order by . 您的第二个查询没有按order by Try 尝试

SELECT c.comentario
FROM ".$db_assin.".utilizadores u, ".$db_assin.".comentarios c "
WHERE u.id_user=c.id_user AND u.id_user='$id_user'
ORDER BY c.id_cmnt DESC
LIMIT 1;

By the way, you should learn to use explicit join syntax. 顺便说一句,您应该学习使用显式联接语法。 This query is better written as: 此查询最好写成:

SELECT c.comentario
FROM ".$db_assin.".utilizadores u join
     ".$db_assin.".comentarios c
     on u.id_user = c.id_user
WHERE u.id_user = '$id_user'
ORDER BY c.id_cmnt DESC
LIMIT 1;

i tried really hard on this and i find the problem. 我对此非常努力,发现了问题。 I'm using websockets in php and jquery and in the code the mensage to websocket was writted before the post but it seems run after this. 我在php和jquery中使用了websockets,并且在代码中对websocket的描述是在发布之前编写的,但是似乎在此之后运行。 So i find for o function that send the message before the post and i discover the $.when(). 因此,我找到了在发布前发送消息的o函数,并发现了$ .when()。 Now i got this. 现在我明白了。 One more time thanks for your support :) 再感谢您的支持:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM