MySQLi を介して MySQL テーブルに単純なデータを挿入しようとしていますが、挿入を拒否し、エラー メッセージは報告されません。
このクエリは、PhpMyAdmin に直接入力すると正常に機能することを強調したいと思います (もちろん、変数は置き換えられます)。
<?php
session_start();
require_once('recaptchalib.php');
require_once('./inc/crypt.php');
require_once('./inc/mysql.php');
$privatekey = "-------------------------------- ";
$u = $mysqli->real_escape_string($_POST['username']);
$p = crypto($_POST['password']);
$e = $mysqli->real_escape_string($_POST['email']);
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
$_SESSION['loginError'] = "The captcha was entered incorrectly!";
header("LOCATION: ./index.php?pg=1");
die();
}
$amt = 0;
if($data = $mysqli->prepare("SELECT * FROM users WHERE username=? OR email=?")){
$data->bind_param("ss", $u, $e);
$data->execute();
$data->store_result();
$amt = $data->num_rows();
$data->close();
}
if($amt != 0){
$_SESSION['loginError'] = "A user has already registered with either that email or username.";
header("LOCATION: ./index.php?pg=1");
die();
}
if(strlen($u) < 5){
$_SESSION['loginError'] = "A username must be greater than 5 characters long.";
header("LOCATION: ./index.php?pg=1");
die();
}
if(strlen($e) <= 5){
$_SESSION['loginError'] = "An email must be greater than 5 characters long.";
header("LOCATION: ./index.php?pg=1");
die();
}
if(!strstr($e, "@")){
$_SESSION['loginError'] = "A valid email must be entered.";
header("LOCATION: ./index.php?pg=1");
die();
}
if(!ctype_alnum($u)){
$_SESSION['loginError'] = "Your username contains an invalid character.";
header("LOCATION: ./index.php?pg=1");
die();
}
$ip = $_SERVER['REMOTE_ADDR']."r";
$mysqli->query("INSERT INTO users (`username`, `password`, `email`, `perms`, `ip`) VALUES ('".$u."', '".$p."', '".$e."', '0', '".$ip."')");
header("LOCATION: ./index.php?win=1");
?>
また、$mysqli->query とプリペアド ステートメントの両方を使用しても機能しないことにも注意してください。
MySQLi セクションの下にある私の phpinfo() は次のとおりです。
Client API library version 5.0.95
Client API header version 5.0.91
MYSQLI_SOCKET /var/lib/mysql/mysql.sock
Directive Local Value Master Value
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket no value no value
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.reconnect Off Off
最後に: 機能する別のファイルで使用されている非常によく似た挿入ステートメントがあります。
前もって感謝します