php
  • mysqli
  • 2016-01-25 33 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?

    相關問題