php
  • mysqli
  • 2016-01-25 35 views 2 likes 
    2

    我试图显示我的个人资料用户的信息,但是当我测试它给了我一个空的结果;查询返回空,期望参数1为mysqli_result

    警告:mysqli_fetch_assoc()预计参数1被mysqli_result,串给出

    如果MySQL查询其工作我测试,这样做,因为它显示我的echo 'Id user: '.$id_user;所以,我不知道这里发生了什么。

    $id_user = $_SESSION["id_usr"]; 
    $consulta = 'SELECT user,name,password,city FROM web_users WHERE id_user=" . mysqli_escape_string($id_user) . "'; 
    $resultado = $mysqli->query($consulta); 
    echo 'OK<br>'; 
    echo 'Id user: '.$id_user; 
    /*if ($resultado->affected_rows == 1){*/ 
        $row = mysqli_fetch_assoc($consulta); 
        echo ' 
         <div class="form_title">User:</div> 
         <div class="form_content">'.$row["user"].'</div><br><br> 
         <div class="form_title">Name:</div> 
         <div class="form_content">'.$row["name"].'</div><br><br> 
         <div class="form_title">Password:</div> 
         <div class="form_content">'.$row["password"].'</div><br><br> 
         <div class="form_title">City:</div> 
         <div class="form_content">'.$row["city"].'</div><br><br>'; 
        /*} 
    else{ 
        $row = array(); 
        echo "<br>Empty Result"; 
    }*/ 
    

    Here you have what is showing :D

    回答

    0

    你的PHP有语法错误,你不能当您在查询mysqli_escape_string($ id_user)像你确实需要的PHP代码中使用',但你可以更新到:

    $consulta = 'SELECT user,name,password,city 
    FROM web_users WHERE id_user=\'' . mysqli_real_escape_string($con,$id_user) .'\''; 
    

    $consulta = "SELECT user,name,password,city 
    FROM web_users WHERE id_user='" . mysqli_real_escape_string($con,$id_user) ."'"; 
    

    $con其中为y我们的连接对象:

    $con=mysqli_connect("localhost","my_user","my_password","my_db"); 
    
    +0

    @Aixix Gallet Segarra,mysqli_real_escape_string函数的第一个参数是连接对象。 –

    0

    试试这个

    $consulta = 'SELECT user,name,password,city FROM web_users WHERE id_user="' . mysqli_escape_string($id_user) . '" '; 
    $resultado = mysqli_query($con,$consulta); 
    
    
    $con->your connection string. 
    
    0

    根据您的屏幕截图,你得到UserID = 1所以你可以用你的查询作为这样的:

    <?php 
        $consulta = 'SELECT user,name,password,city 
        FROM web_users WHERE id_user='.mysqli_escape_string($id_user); 
        $result = $conn->query($consulta); 
    ?> 
    

    现在关于这个问题:

    Warning:mysqli_fet ch_assoc()预计参数1到你的代码中mysqli_result

    // you can use like that: 
    if ($result->num_rows > 0) { 
        // output data of each row 
        while($row = $result->fetch_assoc()) { 
         //your stuff 
        }  
    } 
    else 
    { 
        echo "0 results"; 
    } 
    ?> 
    

    问题:

    其实你用错了可变混合Object OrientedProcedural方法一起还。

    假设,如果你想使用mysqli_fetch_assoc与像程序的方式:

    $row = mysqli_fetch_assoc($consulta); 
    

    ,注意$consulta没有返回资源ID,$consulta等于您查询您在有写串。

    +0

    不要使用射击标签'<?'...它们已被弃用,并且在PHP7中默认不起作用。 – worldofjr

    +0

    @worldofjr:谢谢你,兄弟...我会为此研究..我没有检查.. :) – devpro

    0

    有脚本中的一些错误,恳请检查他们的工作是正确的,请与本替换您的查询,让我知道,如果这有助于

    <?php 
        $id_user = mysqli_escape_string($_SESSION["id_usr"]); 
        $consulta = "SELECT user,name,password,city FROM web_users WHERE id_user='$id_user'"; 
        $resultado = $mysqli->query($consulta); 
        echo 'OK<br>'; 
        echo 'Id user: '.$id_user; 
    
        $row = mysqli_fetch_assoc($resultado); 
    ?> 
    

    希望它可以帮助你

    0

    您需要使用查询中的结果集并遍历任何结果。此外,您使用的单引号字符串不适用于多行。

    尽管如此,你不需要echo。您可以退出PHP处理并在需要变量时重新输入。

    $resultado = $mysqli->query($consulta); 
    echo 'OK<br>'; 
    echo 'ID user: ' . $id_user; 
    while($row = $resultado->fetch_assoc()) 
    { 
        ?> 
         <div class="form_title">User:</div> 
         <div class="form_content"><?=$row["user"];?></div><br><br> 
         <div class="form_title">Name:</div> 
         <div class="form_content"><?=$row["name"];?></div><br><br> 
         <div class="form_title">Password:</div> 
         <div class="form_content"><?=$row["password"];?></div><br><br> 
         <div class="form_title">City:</div> 
         <div class="form_content"><?=$row["city"];?></div><br><br> 
        <?php 
    } 
    

    此外,您在字符串中使用mysqli_real_escape_string()而不正确地离开字符串解析。无论如何,我实际上不会尝试通过转义字符串来清理输入;准备语句是一个更好的主意......

    $consulta = 'SELECT user,name,password,city FROM web_users WHERE id_user = ?'; 
    $stmt = $con->prepare($consulta); 
    $stmt->bind_param('i', $id_user); 
    $stmt->execute(); 
    
    $resultado = $stmt->get_result(); 
    while ($row = $resultado->fetch_assoc()) 
    { 
    
    } 
    

    注:应防止SQL注入。看看How can I prevent SQL injection in PHP?

    相关问题