Я делаю скрипт, который проверяет, являются ли полномочия, предоставленные пользователем, действительными (пользователь существует). Я 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 в зависимости от входа)
Но во втором варианте выход просто -> чек-колл. Почему эта часть
$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();
не выполняется при использовании в качестве функции
Переменная db не является глобальной, она должна быть параметром –
Jari, Cristian Bitoi благодарит вас обоих за ответы. Я перевернул монету, чтобы решить, чей ответ я принимаю, поскольку считаю их одинаково хорошими. –