私の問題の解決策を見つけるのが苦労しています。私がmysqliプリペアドステートメントでbind_paramを呼び出そうとすると、「非オブジェクト上のメンバ関数bind_param()を呼び出します。クラスのメソッドを出力するループがあり、リストにbind_paramがあります。get_class_methodsが返すにもかかわらず、非オブジェクト上のメンバー関数bind_param()を呼び出す
Register.phpファイル
<?php
include('database.php');
if(isset($_SESSION['user'])){
die("You are already logged in ".$_SESSION['user'].", you can't register right now.");
}
register($_POST['username'],$_POST['password'],$_POST['pin'],$_POST['fname'],$_POST['lname'],$_POST['email']);
function register($u,$p,$pi,$f,$l,$e){
/*if($u === "" or $u==="Admin" or $u==="Administrator"){
die("You cannot choose this username");
}*/
if($pi < 0 or $pi > 99999){
die("Invalid Pin number");
}
if($f === "" or $l === ""){
die("Invalid first or last name");
}
if($e === ""){
die("Invalid email");
}
global $conn;
$prep = $conn->prepare("SELECT email FROM users WHERE username=?");
$meth = get_class_methods($prep);
foreach ($meth as $method_name) {
echo "$method_name<br>";
}
$prep->bind_param("s",$u);
$prep->execute();
if($prep->error){
die("User creation failed with the following error: ".$prep->error());
}
if($prep->num_rows > 0){
die("User already exists");
}
$prep->close();
$prep2 = $conn->prepare("INSERT INTO users VALUES(username, password, pin, fname, lname, email,coin) (?,?,?,?,?,?,0)");
$prep2->bind_param("ssisss",$u,$p,$pi,$f,$l,$e);
$prep2->execute();
if(!$prep2->error()){
die("User created successfully");
}else{
die("User creation failed with the following error: ".$prep->error());
}
$prep2->close();
}?>
database.phpでファイルそれは
<?php
$ip = "xo6.x10hosting.com";
$username = "-snip-";
$password = "-snip-";
$database = "-snip-";
$conn = new mysqli($ip, $username, $password, $database);
if ($conn->connect_error or mysqli_connect_error()) {
die("Connection failed: " . $conn->connect_error);
}
if($conn->error){
die("Mysql Error: ".$conn->error);
}?>
私は、私は問題がないと思うdatabase.phpでファイルからすべてのエラーを得ることはありません含まある。
エラーをスローする最初のbind_paramで、2番目のスレッドではないと確信していますか? – aynber
これは最初ですが、私はそれを書き直しました。何かが第2の 'SQL構文でエラーがあります。 '(?、?、?、?、0)' 1行目付近で使用する正しい構文については、MariaDBサーバのバージョンに対応するマニュアルを確認してください。 – end360
2番目に、クエリの順序が間違っています。 。それは 'INSERT INTOテーブル(リスト、列、列)VALUES(?、?、?)' – aynber