$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 = 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 {
// 註冊邏輯
}
$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_connect | new 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 注入與邏輯錯誤。