我在一个函数中输入一个lopp时遇到一些困难。这是我正在使用的代码。我的意思是能够从函数中返回一个结果数组,该函数包含与特定用户id相关联的图片的id号 - 在这种情况下,我想print_r数组的用户ID为17.当此代码为'n'时在它运作的功能中,但当我把它放在功能中时,没有运气。我认为它与我在返回数组时犯的错误有关。非常感谢您的帮助。
function picture($id)
{
$sql = "SELECT * FROM avatar WHERE user_id={$id}";
$result = $database->query($sql);
$results = array();
while ($row = mysql_fetch_assoc($result))
{
$results[] = $row;
}
return $results;
}
$results = picture(17);
print_r($results);
答案 0 :(得分:1)
首先,您将面向对象的范例($database->query($sql)
)与程序范例(mysql_fetch_assoc($result)
)混合在一起,这将使您的代码成为维护的噩梦。
假设$database
是mysql_
链接标识符,您需要将其传递到您的函数中,以便在那里访问它。
function getUserAvatar($database, $id){
$sql = 'SELECT * FROM `avatar` WHERE `user_id`=' . intval($id) . ' LIMIT 1;';
$result = mysql_query($database, $sql);
$row = mysql_fetch_assoc($result);
return $row;
}
$results = picture($database, 17);
上面的内容可能会有效,但是如果你允许用户将该用户ID传递给该函数,很可能他们能够找到一个漏洞将他们选择的SQL语句注入到MySQL中数据库中。
mysql_
函数已弃用,因此理想情况下您应停止使用它们并切换到mysqli
或PDO 。您还希望了解预准备语句以防止SQL注入。如果您无法升级,请查看mysql_real_escape_string
和intval
函数,并确保在处理之前清理所有用户输入。
如果切换到mysqli和prepared statements,结果代码将如下所示:
function getUserAvatar($db, $userId) {
$stmt = $db->prepare("SELECT * FROM `avatar` WHERE `user_id`=? LIMIT 1;");
$stmt->bind_param("i", $userId);
$stmt->execute();
$res = $stmt->get_result();
return $res->fetch_assoc();
}
$db = new mysqli("localhost", "user", "password", "database");
$result = getUserAvatar($db, 17);
答案 1 :(得分:-1)
可能你应该试试这个..
function picture($id)
{
$sql = "SELECT * FROM avatar WHERE user_id={$id}";
$result = $database->query($sql);
$row = mysql_fetch_assoc($result);
return $row;
}
$results = picture(17);
print_r($results);