为什么这个SQL查询不起作用?

时间:2013-10-17 10:11:08

标签: php mysql

我一直在讨论这个问题,但是无法让它发挥作用。这有什么问题?

        $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;

错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法。

令人惊讶的是,下面一个(删除WHERE子句)有效。为什么呢?

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

表格结构:

表及其列的一切都很好,因为此查询在其他任何地方都有效,只有不在这里!

3 个答案:

答案 0 :(得分: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 :(得分:0)

如果问题中的$query返回空行,则其下方的变量仍然未分配 - 即$pts$name没有实体。

但是,它们下面的查询使用变量$pts,这可能需要存储一些值 - 如果没有,则会抛出上面发布的MYSQL错误。对此查询使用函数queryMysql()可以进一步清除问题,因为它定义如下:

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

因此,MySql错误。

答案 2 :(得分:-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);

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

相关问题