不确定mysql查询

时间:2014-04-15 20:16:18

标签: php mysql

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

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

谢谢。

5 个答案:

答案 0 :(得分:3)

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

其他问题:

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

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

$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'];
        }
    }
}

答案 1 :(得分:2)

<强> MySQL的:

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

<强>库MySQLi:

$mysqli = new mysqli("localhost", "root_user", "root_password", "database_name");

if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

if ($result = $mysqli->query("SELECT * FROM members WHERE email ='$email'")) {        
    while ($row = $result->fetch_array(MYSQLI_ASSOC)){
      $firstname = $row['firstname'];
    }
    $result->close();
}

$mysqli->close();

答案 2 :(得分:0)

你在哪里需要mysql_num_rows?我非常怀疑这会奏效。我想你不能组合mysql函数,但不能确定,因为我多年没有使用mysql函数,你也不应该弃用它们。尝试使用mysqli。

答案 3 :(得分:0)

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

应该是

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

答案 4 :(得分:0)

请远离使用mysql并开始使用mysqli或PDO,因为mysql函数现已弃用。

至于您的查询,这是一个例子:

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); // The Connection

$query = "SELECT * FROM members WHERE email ='$email'"; // MySQL Query
$data = mysqli_query($dbc, $query); // Perform the Query

 $row = mysqli_fetch_array($data); // Work with the data using $row

  $firstname = $row['firstname'];

显示输出:

 while($row = mysqli_fetch_array($data)) {

  // do something to echo

 }