我正在製作一個腳本來檢查用戶給出的憑據是否有效(用戶存在)。我是一個PHP noob,我不明白爲什麼我的腳本不起作用。PHP - 如果通過函數調用查詢不執行
所以,你能解釋一下我爲什麼如果我這樣做它的工作原理:
<?php
// include database constants
include_once("../config/config.php");
// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$mysqli->set_charset("utf8");
$email = $_POST['email'];
$password = $_POST['password'];
$stmt = $mysqli -> prepare("SELECT * FROM mytable WHERE email=? AND password=?");
$stmt -> bind_param("ss", $email, $password);
$stmt -> execute();
$stmt-> store_result();
printf(" Number of rows: %d.\n", $stmt->num_rows);
$stmt -> close();
$mysqli->close();
?>
但如果我這樣做是不?
<?php
// include database constants
include_once("../config/config.php");
// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$mysqli->set_charset("utf8");
$email = $_POST['email'];
$password = $_POST['password'];
function check() {
printf("check called\n"); //debug
$stmt = $mysqli -> prepare("SELECT * FROM mytable WHERE email=? AND password=?");
$stmt -> bind_param("ss", $email, $password);
$stmt -> execute();
$stmt -> store_result();
printf(" Number of rows: %d.\n", $stmt->num_rows);
$stmt -> close();
}
check();
$mysqli->close();
?>
在第一版本的輸出 - >行數:1(或0依賴於輸入)
但在第二版本的輸出僅僅是 - >檢查調用。爲什麼作爲函數
db變量不是全局變量,它需要是參數 –
Jari,Cristian Bitoi感謝你的答案。爲了決定我接受誰的答案,我翻了一枚硬幣,因爲我認爲他們同樣好。 –