2017-07-27 58 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