2017-07-27 10 views
-5

私はエラーを取得していますその非マッチングパラメータのMysqli/PHP

警告:mysqli_stmt_bind_param():変数の数が Cでプリペアドステートメント内のパラメータの 数と一致しません:\ wamp64 \ WWW \ライン上でのテストの\ view.php 17

誰もが、私はそれが一致見ることができるので、私は間違ってやっているかを見ることができます

<?php 
$connect = mysqli_connect("localhost", "user", "pass", "db"); 

if(mysqli_connect_error()){ 
    echo mysqli_connect_error(); 
    exit(); 

} 

$query = "SELECT id, username, password FROM users"; 

$stmt = mysqli_prepare($connect, $query); 

if($stmt){ 
    mysqli_stmt_bind_param($stmt,"iss",$id, $username, $password); 
    mysqli_stmt_bind_result($stmt,$id, $username, $password); 
    mysqli_stmt_execute($stmt); 

    mysqli_stmt_fetch($stmt); 
    echo "ID: ".$id. "Username: ".$username."Password: ".$password; 


    } 
?> 
+2

あなたは、クエリ内の任意のプレースホルダを持っていません。準備された声明がどのように機能するかを理解していますか? –

+1

これらの変数 '$ id、$ username、$ password'のどこで値を取得しましたか? –

+0

はい。あなたは準備された声明がどのように働くか全く理解していません。 http://bobby-tables.com - ここを見てください。 実際には、プレースホルダがないため、何の理由もなく変数にクエリをバインドしようとしています。 また、クエリを実行する前に結果をバインドしようとします。一歩前に戻って、 'mysqli_ *'がどのように動作するかについてのチュートリアルを読んで理解してください。実際には、あなたはそれを全く理解していません(それは問題ではありません。速くなるでしょう)が、今は本当にそれを学ぶことをお勧めします。あなたのコードを書き直すと、それはあなたを助けません。 – Twinfriends

答えて

0

私は見上げてPreparedステートメントをさらに読んで最初から始めましたが、ログインフォームのような登録フォームがありました。この情報が正しく機能しているように確実に投稿する正しい方法であるかどうかを教えてください。また、メールが重複していないことを投稿する前に確認する方法はありますか?私はこれを行い、同期エラーからコマンドを取得しようとしました。私はこれを丸める方法を考えることができませんでした。誰かが私に正しい方向を教えることができれば、それは非常に高く評価されるだろう。

<?php 
 
require ("connect.php"); 
 
if(isset($_POST['reg'])) { 
 
\t 
 
    
 
    $username = $_POST['username']; 
 
\t $password = $_POST['password']; 
 
    $email = $_POST['email']; 
 
    $about = $_POST['about']; 
 
    $type = $_POST['type']; \t 
 
    $password_hash = password_hash($password, PASSWORD_DEFAULT);  
 
    
 

 
\t if (empty($username)) { 
 
\t \t $msg = "Please create your username"; 
 
\t } elseif (empty($password)) { 
 
\t \t $msg = "Please create your password"; 
 
\t } elseif (empty($email)) { 
 
\t \t $msg = "Please enter your email"; \t 
 
\t } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
 
\t \t $msg = "Invalid email format"; \t \t 
 

 
\t } else { 
 
\t 
 
    if(!($stmt = $connect->prepare("INSERT INTO users (username, password, email, about, type) 
 
     VALUES (?,?,?,?,?)"))){ 
 
     echo "Failed: (" . $connect->errno . ")" . $connect->error; 
 
    } 
 

 
    if(!$stmt->bind_param('sssss', $username, $password_hash, $email, $about, $type)){ 
 
    echo "Failed:(" . $stmt->errno . ")" . $stmt->error; 
 
    } 
 

 
    if(!$stmt->execute()){ 
 
    echo "Failed: (" . $stmt->errno .")" . $stmt->error; 
 
    } 
 

 
    if($stmt) { 
 
\t \t echo "Registration Success!!"; 
 

 
    } 
 
    else{ 
 
     echo "Registration failed"; 
 
    } 
 
\t } 
 

 
\t } 
 
$connect->close(); 
 
?>

+0

これは質問ではなく、回答として投稿する必要があります。 – kojow7

関連する問題