我撰寫了使用 php 和 mysql prepare 陳述句進行注冊的代碼。我不知道為什么它沒有插入記錄!誰能告訴我問題出在哪里 即使這里是我的 adduser.php 代碼,它也沒有顯示任何錯誤或成功訊息
<?php
include 'config.php';
//checkusername
$check = $con->prepare("select username from users");
while($row = $check->fetch(PDO::FETCH_ASSOC)){
if($row['username'] == $_POST['username'])
echo -1;
else{
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$sql->bindParam($name,$username,$password);
$name = $_POST['name'];
$username = $_POST['username'];
$password = md5($_POST['password']);
$sql->execute();
echo 1;
}
}
?>
uj5u.com熱心網友回復:
$sql->bindParam($name,$username,$password);
是不正確的。您必須通過單獨呼叫 bindParam 來系結每個引數。
請參閱bindParam的 PHP手冊頁中的引數串列和示例,以了解該函式接受什么作為輸入,以及如何在實踐中使用它。
例如
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$sql->bindParam(1, $name);
$sql->bindParam(2, $username);
$sql->bindParam(3, $password);
...
$sql->execute();
或者,您可以簡單地呼叫execute 函式并以這種方式傳入引數陣列:
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$params = [$name, $username, $password];
$sql->execute($params);
PS 如果您在運行代碼時沒有收到任何型別的錯誤或此問題的指示,那么請確保您啟用了 PHP 的錯誤記錄功能和PDO 的例外報告模式,以便您可以獲得有關代碼中任何錯誤的詳細資訊。
PPS 請不要使用過時的、不安全的 md5 演算法存盤密碼 - 這是一種安全風險。而是了解 PHP 的內置、最新、安全的密碼散列和驗證函式。
PPPS 查詢所有用戶并遍歷它們以查找具有相同用戶名的任何現有記錄是沒有意義的。這是非常低效的。您可以更快,更有效地過濾使用SQL結果WHERE的條款SELECT,例如select username from users where username = ?。將用戶名系結到該用戶名,如果匹配,您將回傳一行作為回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/349054.html
上一篇:來自兩個不同表的除法結果
