2016-08-29 4 views
0

私の問題の解決策を見つけるのが苦労しています。私が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でファイルからすべてのエラーを得ることはありません含まある。

+0

エラーをスローする最初のbind_paramで、2番目のスレッドではないと確信していますか? – aynber

+0

これは最初ですが、私はそれを書き直しました。何かが第2の 'SQL構文でエラーがあります。 '(?、?、?、?、0)' 1行目付近で使用する正しい構文については、MariaDBサーバのバージョンに対応するマニュアルを確認してください。 – end360

+0

2番目に、クエリの順序が間違っています。 。それは 'INSERT INTOテーブル(リスト、列、列)VALUES(?、?、?)' – aynber

答えて

0

あなたは、コードのブロックを間違え:

if(!$prep2->error()){ 
     die("User created successfully"); 
    }else{ 
     die("User creation failed with the following error: ".$prep->error()); 
    } 

あなたは$分取>エラー()が$準備をする前に閉鎖された呼び出そう。

+0

そのブロックで$ prep-> error()ではなく$ prep2-> error()を呼び出そうとしましたが、エラーはメソッドではなく変数であるため、かっこが使用されます。 – end360

+0

この行を見てください( "次のエラーでユーザー作成に失敗しました:"。$ prep-> error()); –

関連する問題