2013-10-17 107 views
0

我一直在竊聽這個,但無法得到這個工作。這有什麼問題?這個SQL查詢爲什麼不起作用?

 $query="Select studentid,firstname,lastname,pts from students where collegeid=4"; 
     $result=mysql_query($query); 
     $row=mysql_fetch_array($result); 
     $pts=$row['pts']; 
     $name=$row['firstname']." ".$row['lastname']; 
     $rank= mysql_num_rows(queryMysql("Select distinct pts from students where pts>=$pts")); 
     echo<<<_END 
     <a href="student_profile.php?studentid=$row[studentid]" style="text-decoration: none;"> 
     <div class="apps_each your_rank"> 
      <span style="margin-right:5px;">$rank</span> 
     <div class="dp_small_c"><img class="dp_small" src="upload/$row[studentid].jpg"/></div> 
     <span class="apps_names">$name</span> 
      <div style="float:right"> 
     <img src='pts.png' /><span>$row[pts]</span> 
     <img src='level.png' /><span>Level 1</span> 
     </div> 
     </div> 
     </a> 

_END;

錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

令人驚訝地,下面一(除去WHERE子句)的工作原理。爲什麼?

$row=mysql_fetch_array(mysql_query("Select studentid,pts,firstname,lastname from students")); 

表結構:

一切都很好用表及其列,因爲此查詢的工作地方一樣,只是不在這裏!

+0

這是從您的非工作代碼直接複製/粘貼?另外,MySQL擴展不好(不推薦); PDO/MySQLi好 – Phil

+0

是的,這是我的代碼複製粘貼。最近我一直在努力學習PDO。 – kamal0808

+0

等一下,該代碼不會產生該錯誤。你需要'mysql_error'。請將* real *代碼添加到您的問題中 – Phil

回答

0

如果$query的問題返回一個空行,那麼變量下它仍然未分配 - 即$pts$name沒有實體。

但是,他們下面的查詢使用變量$pts,這大概需要存儲一些值 - 當沒有時,會拋出上面發佈的MYSQL錯誤。此查詢的使用功能queryMysql()的進一步清除了問題,因爲它被定義如下:

function queryMysql($query) 
{ 
    $result=mysql_query($query) or die(mysql_error()); 
    return $result; 
} 

因此,MySQL錯誤。

0

你在評論中提到你想使用PDO。這裏是你可以嘗試:

$username = "enterUsername"; 
$password = "enterPass"; 
$conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password); 

$query = $conn->prepare("Select studentid,pts,firstname,lastname from students where collegeid=:id"); 

$query->execute(array(
    ':id' => 4 
)); 

// get errors if there are 
$errors = $query->errorInfo(); 
echo "<pre>"; 
print_r($errors); 
echo "</pre>"; 

$results = $query->fetch(PDO::FETCH_ASSOC); // can also be fetchAll if you have more than 1 row. 


// to test and check results 
echo "<pre>"; 
print_r($results); 
echo "</pre>"; 
-1

我會使用這個庫的所有MySQL查詢 - http://www.meekro.com

你的選擇查詢變成這樣:

// Load Library 
require 'meekrodb.2.2.class.php'; 

// Setup DB Connection 
DB::$user  = 'my_database_user'; 
DB::$password = 'my_database_password'; 
DB::$dbName  = 'my_database_name'; 
DB::$host  = '123.111.10.23'; 

// Where clause 
$collegeid = 4; 

// Exec Query 
$row = DB::queryFirstRow("Select studentid,pts,firstname,lastname from students where collegeid = %d", $collegeid); 

源:http://www.meekro.com/docs.php#anchor_queryfirstrow

+0

這是一個不錯的圖書館,讓事情變得更輕鬆。儘管我懷疑它是否能保證與PDO一樣的安全性。 – kamal0808

+0

它在SQL注入保護方面有着良好的記錄,並且比pdo更好 - 讀一讀http://www.meekro.com/pdo.php – Latheesan

+0

當然,如果您使用SQL注入防護功能正確使用庫,即使用參數化查詢(如在我的例子中)(即%s被替換爲字符串,%d被替換爲十進制/ int等等,並且庫負責轉義查詢的參數) - 更多信息在這裏http://www.meekro.com/quickstart.php – Latheesan