首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP MySQL 查詢郵箱是否存在:mysql_query 返回資源而非結果集,正確判斷邏輯

     編輯:程式設計綜合問答

錯誤代碼

$sql = "SELECT count(*) FROM users WHERE user_email='$user_email'";
if (mysql_query($sql, $con) == '1') {  // 錯誤:mysql_query 返回 resource,永遠 != '1'
    echo "exist";
}

根因

mysql_query() 成功返回 **資源句柄** (resource),失敗返回 false。**不返回結果集內容**。必須配合 mysql_fetch_row() / mysql_fetch_assoc() 取數據。

正確寫法 (mysqli 預處理,防注入)

$mysqli = new mysqli("localhost", "user", "pass", "db");
$stmt = $mysqli->prepare("SELECT COUNT(*) FROM users WHERE user_email = ?");
$stmt->bind_param("s", $user_email);
$stmt->execute();
$stmt->bind_result($count);
$stmt->fetch();
$stmt->close();

if ($count > 0) {
    echo "exist";
} else {
    // 註冊邏輯
}

舊 mysql_* 修正版 (不推薦新項目使用)

$result = mysql_query($sql, $con);
if ($result) {
    $row = mysql_fetch_row($result);
    if ($row[0] > 0) {  // $row[0] 是 count(*) 結果
        echo "exist";
    } else {
        // 註冊
    }
    mysql_free_result($result);
} else {
    die('Query failed: ' . mysql_error());
}

關鍵遷移清單

舊 API新 API (mysqli)優勢
mysql_connectnew mysqli()面向對象、預處理、事務
mysql_query$mysqli->query() / prepare()預處理防 SQL 注入
mysql_fetch_row$result->fetch_row()同步 API
mysql_error$mysqli->error異常可捕獲

完整註冊流程最佳實踐

$email = trim($_POST['user_email'] ?? '');
$pass = $_POST['user_pass'] ?? '';
$nick = $_POST['user_nickname'] ?? '';

if (!$email || !$pass || !$nick) { exit('字段不能為空'); }
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { exit('郵箱格式錯誤'); }

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$stmt = $mysqli->prepare("SELECT 1 FROM users WHERE user_email = ? LIMIT 1");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) { exit('郵箱已註冊'); }
$stmt->close();

$hash = password_hash($pass, PASSWORD_DEFAULT);
$stmt = $mysqli->prepare("INSERT INTO users (user_email, user_pass, user_nickname) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $email, $hash, $nick);
$stmt->execute();
echo '註冊成功';

核心修復:**mysql_query 返回資源,必須 fetch 取值**;現代項目**強制使用 mysqli/PDO 預處理**,杜絕 SQL 注入與邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved