2017-07-15 111 views
0

我在我的項目中擁有一切權利。但我不能在屏幕打印此查詢SQL查詢的打印結果

$sql = "SELECT * FROM appointment WHERE prof_id=(SELECT user_id FROM user WHERE lastname='$prof_last') AND student_id=(SELECT user_id FROM user WHERE username={$_SESSION['username']});"; 
$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_assoc($result); 
echo "<div>$row</div>" ; 

具體的restults它表明我這個錯誤:mysqli_fetch_assoc()預計參數1被mysqli_result,布爾給

我搜索無處不在,但不明白什麼即時通訊做錯

+0

皮特的緣故看手冊[PHP Mysqli Fetch Assoc](http://php.net/manual/en/mysqli-result.fetch-assoc.php) – RiggsFolly

+0

我有..但我實際上不能理解 – kon

+0

您的查詢中可能有錯誤,因此$ result是錯誤的。檢查您的查詢 –

回答

0

mysqli_fetch_assoc返回讀取的每行的陣列,以便$row是一個數組

的列的名稱將被作爲鍵中的值從DAT取凌辱。

因此,作爲一個例子,如果你做了一個

SELECT a,b,c FROM table 

你會做這樣的事情,以顯示數據

$result = mysqli_query($conn, $sql); 
// check for errors 
// you do have errors so please add this test 
if (!$result) { 
    echo $conn->error; 
    exit; 
} 

while ($row = mysqli_fetch_assoc($result)) { 
    echo "<div>{$row['a']}</div>" ; 
} 

現在,您需要在回聲中使用真實的列名line

恐怕我應該提一下你的腳本有風險SQL Injection Attack 有看看發生了什麼事Little Bobby Tables即使 if you are escaping inputs, its not safe! 使用prepared parameterized statements

+0

實際上做到了。謝謝。但是我的預約表有2個id columns和2個datetime ..所以如果我想顯示兩個日期時間,而不是id這個acutal名稱,我應該怎麼做? – kon

+0

您必須提出另一個問題,因爲這與此問題有很大不同。在這個新問題中,請向我們展示涉及表的模式 – RiggsFolly

0

你最有可能需要更改代碼。

除非$_SESSION['username']已經由單引號包圍,你應該寫

$sql = "SELECT * FROM appointment " . 
     "WHERE prof_id=(SELECT user_id FROM user WHERE lastname='$prof_last') " . 
     " AND student_id=(SELECT user_id FROM user WHERE username='{$_SESSION['username']}');"; 

$result = mysqli_query($conn, $sql); 
if ($result) 
{ 
    $row = mysqli_fetch_assoc($result); 
    echo "<div>$row</div>" ; 
} 
else 
{ 
    // perform error checking as adequate 
} 

...或者更好的是:

$sql = "SELECT * " . 
     "FROM appointment a " . 
     "  JOIN user prof ON prof.user_id = a.prof_id " . 
     "  JOIN user stud ON stud.user_id = a.student_id " . 
     "WHERE " . 
     "  prof.lastname = '$prof_last' " . 
     "  AND stud.username = '{$_SESSION['username']}'; " ; 

注意:這僅僅是安全的,如果$prof_last{$_SESSION['username']}已經正確消毒。使用預準備語句和綁定參數總是更好。

+0

[SQL注入攻擊](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – RiggsFolly

+1

@RiggsFolly:除非$ prof_last和$ _SESSION ['username']'已經正確轉義。我們不知道他們是否是否是。如果我要編程,我會使用'?'然後綁定參數。無論如何,請參閱答案上的最後一個註釋;它與你保持一致。 – joanolo

+0

即使 [如果你是逃避投入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[準備參數化語句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly