gpt4 book ai didi

php - 不确定mysql查询

转载 作者:行者123 更新时间:2023-12-01 00:45:11 26 4
gpt4 key购买 nike

我想知道这是否正确?我有一种感觉,它不是,并且想知道修复它的最佳方法。

$query= mysql_num_rows(mysql_query("SELECT * FROM members WHERE email='$email'"));
while ($row = mysql_fetch_array($query)) {
$firstname = $row['firstname'];
}

谢谢。

最佳答案

您将行数分配给 $query,而您应该分配 mysql_query() 的返回值,因为 mysql_fetch_array() 需要一个结果标识符作为其参数。

其他问题:

  • 使用已弃用的 MySQL 库。考虑升级到 PDO 或 MySQLi
  • $email 的来源未显示,但可能存在 SQL 注入(inject)漏洞。在 PDO 或 MySQLi 中使用准备好的语句来防止这种情况。
  • 在尝试获取行之前检查返回值。如果您的查询失败,您将向 mysql_fetch_array() 传递一个 bool 值。

重构以显示正确的逻辑(但仍不应使用,因为它已被弃用):

$query= mysql_query("SELECT * FROM members WHERE email='" . mysql_real_escape_string($email) . "'");

if($query){ // check the return value
while ($row = mysql_fetch_array($query)) {
$firstname = $row['firstname'];
}
}

使用准备好的语句的 MySQLi 示例:

$db = new mysqli('localhost', 'user', 'pass', 'dbname');
if($stmt = $db->prepare('SELECT * FROM members WHERE email = ?')){
$stmt->bind_param('s', $email);
$stmt->execute();

if($result = $stmt->get_result()){
while ($row = $result->fetch_assoc()){
$firstname = $row['firstname'];
}
}
}

关于php - 不确定mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com