2014-10-17 54 views
0

我是MySQL的新手。我創建了一個運行PHP來查詢數據庫的登錄頁面。mysql準備好的語句不起作用

我想做一個準備好的語句來防止SQL注入,但它不工作。 $結果給了我0.1

的cgi-bin /的welcome.php

<?php 
$email= $_POST["email"]; 
$pwd = $_POST["password"]; 

$dbh=mysqli_connect("localhost", 
"zzengnin",<password>,"zzengnin_wheel") 
or die ('Database is not able to connect'); 

$qry= "SELECT email FROM Info WHERE email=? AND pw=?"; 

if ($stmt = mysqli_prepare($link, $qry)) { 
    mysqli_stmt_bind_param($stmt, "ss", $email, $pwd); 
    mysqli_stmt_execute($stmt); 

    mysqli_stmt_bind_result($stmt, $result); 
    mysqli_stmt_fetch($stmt); 
    printf("result email is %s\n", $result); 
} 


if(mysqli_num_rows($result)>0) 
{ 
    echo "Welcome! '$email', you are officially logged in! "; 
} 
else{ 
    echo "Your Email or Password is WRONG!!!!"; 

    echo $result + " result"; 
} 
mysqli_stmt_close($stmt); 
mysqli_close($dbh); 
?> 

這是形式的login.php

<!DOCTYPE html> 
<head><title>Wheel Sharing</title> 
<link rel = "stylesheet" type = "text/css" href = "CSS/style.css"> 
</head> 
<body> 
<h1>Log in</h1> 

<form action="cgi-bin/welcome.php" method="post"> 
Email: <input name="email" type="text" size="20"/> 
<br/> 
Password: <input name="password" type="password" > 
<br/> 
<input type="submit" value="Login"/> <input type="reset" value="Reset"/> 

</form> 

</body> 
</html> 

所有幫助表示讚賞:)

+1

如果您正在移植到'mysqli',這是一件好事,面向對象的界面通常不那麼雜亂。那就是你使用'$ stmt-> bind_param()'而不是老派的程序等價物,這是PHP4的遺物。 – tadman 2014-10-17 21:19:13

+1

這也是非常令人擔憂的是,您似乎沒有采取任何預防措施[正確哈希用戶密碼](http://www.phptherightway.com/#password_hashing),暴露您的用戶相當大的風險,如果您的數據庫被泄密。 – tadman 2014-10-17 21:20:37

+0

您需要捕獲錯誤並將其返回,以便知道發生了什麼。你的錯誤日誌發生了什麼? – 2014-10-17 21:21:32

回答

1

更改此:

mysqli_stmt_execute($stmt); 

對此:

$result = mysqli_stmt_execute($stmt);