2013-10-17 63 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