0

你好,

我的功能有什么问题?似乎它不起作用,但我不知道为什么。该函数应该返回一个用户名:

function getusername($username) {
    $sql = "SELECT username FROM users WHERE id='".$username."' LIMIT 1";
    $res = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_assoc($res);
    return $row['$username'];

当我在此代码中使用它时,它不返回任何内容:

if (mysql_num_rows($res) == 1) {
    echo "<table width='100%'>";
    // Check to see if the person accessing this page is logged in
    if (isset($_SESSION['username'])) { echo "<tr><td colspan='2'><input type='submit' value='Add Reply' onClick=\"window.location = 'post_reply.php?cid=".$cid."&tid=".$tid."'\" /><hr />"; } else { echo "<tr><td colspan='2'><p>Please log in to add your reply.</p><hr /></td></tr>"; }
    // Fetch all the topic data from the database
    while ($row = mysql_fetch_assoc($res)) {
        // Query the posts table for all posts in the specified topic
        $sql2 = "SELECT * FROM posts WHERE category_id='".$cid."' AND topic_id='".$tid."'";
        // Execute the SELECT query
        $res2 = mysql_query($sql2) or die(mysql_error());
        // Fetch all the post data from the database
        while ($row2 = mysql_fetch_assoc($res2)) {
            // Echo out the topic post data from the database
            echo "<tr><td valign='top' style='border: 1px solid blue;'><div style='min-height: 125px;'>".$row['topic_title']."<br />by ".getusername($row2['post_creator'])." - ".convertdate($row2['post_date'])."<hr />".$row2['post_content']."</div></td><td width='200' valign='top' align='center' style='border: 1px solid blue;'>User Info Here</td></tr><tr><td colspan='2'><hr /></td></tr>";
        }
4

3 回答 3

3

你应该return $row['$username'];改为return $row['username'];

于 2012-12-28T11:38:22.117 回答
1

使用 PDO。

你可以在这里阅读。

如果我能找到让你抬头看的方法,';DROP TABLE users;--那么我会给你带来非常糟糕的一天。提示:我可以使用$_GETvars 选择类别或主题编号吗?

您还应该使用 JOIN

对数据库执行 1 次查询优于 10 次:

SELECT posts.*, users.username FROM posts
JOIN users ON (users.username = posts.post_creator)
WHERE category_id=:category_id AND topic_id=:topic_id

 美元符号是 PHP 的东西,而不是 MySQL 的东西。

return $row['$username'];

应该:

return $row['username'];
于 2012-12-28T11:42:53.090 回答
0

你在哪里调用 mysql_connect 和 mysql_select_db 在你的代码中?

根据我的经验,最好尽快调用 connect 函数并将返回的资源加载到全局变量中,以便可以在所有函数中使用它。例如:

global $dbHandle;
$dbHandle = mysql_connect("server string");

然后你的函数看起来像这样:

function getusername($username) {
global $dbHandle;
$sql = "SELECT username FROM users WHERE id='".$username."' LIMIT 1";
$res = mysql_query($sql, $dbHandle) or die(mysql_error());
$row = mysql_fetch_assoc($res);
return $row['$username'];
}
于 2012-12-28T11:42:27.107 回答