Неустранимая ошибка: вызов функции-члена bind_param () для логического значения с использованием временной таблицы в PDO - PullRequest
0 голосов
/ 20 марта 2019

поэтому у меня есть 2 таблицы: администратор и сотрудник с только 2 столбца, которые они совместно используют

одна форма входа

и 2 отдельные панели для каждой

, чтобы временно сделать их одной таблицей. Я включил их в UNION , а также добавил временный столбец, чтобы определить тип пользователя.и, следовательно, войдя в правую панель инструментов.

, чтобы сделать это после очень долгих поисков и множества ошибок и следов, я пришел к выводу, что это лучшее, что я могу сделать и понять как новичок в этомfield.

Вот так выглядит мой последний кусок:

    // preparing a temporary table that unions the admin and employee tables
$TMP = "SELECT EMP_ID AS ID, EMP_EMAIL AS EMAIL, 2 AS TYPE FROM employee
                        UNION
                        SELECT ID, EMAIL, 1 AS TYPE FROM admin ";
$result = $con->prepare($TMP);                      
$result-> execute();
$result-> store_result();
$result-> fetch();

    // preparing select statement for logging in
$stmt = $con->prepare('SELECT `TYPE` FROM `".$result."` WHERE `ID` = ?');
    // Bind parameters (s = string, i = int, b = blob, etc), in our case the username is a string so we use "s"
    $stmt->bind_param('i', $_POST['ID']);
    $stmt->execute();
    // Store the result so we can check if the account exists in the database.
    $stmt->store_result();
    if ($stmt->num_rows > 0) {
    $stmt->bind_result($ID);
    $stmt->fetch();
    }
        if ($stmt['TYPE'] == 1) {
            if ($_POST['ID'] == $ID) {
        // Verification success! User has loggedin!
        // Create sessions so we know the user is logged in, they basically act like cookies but remember the data on the server.
            session_regenerate_id();
            $_SESSION['loggedin'] = TRUE;
            $_SESSION['email'] = $_POST['EMAIL'];
            $_SESSION['id'] = $ID;
            echo 'Welcome ' . $_SESSION['email'] . '!';
        } else {
        echo 'Incorrect password!';
    }
        } else if ($stmt['TYPE'] == 2) {
    if ($_POST['ID'] == $ID) {
        // Verification success! User has loggedin!
        // Create sessions so we know the user is logged in, they basically act like cookies but remember the data on the server.
        session_regenerate_id();
        $_SESSION['loggedin'] = TRUE;
        $_SESSION['email'] = $_POST['EMAIL'];
        $_SESSION['id'] = $ID;
        echo 'Welcome ' . $_SESSION['email'] . '!';
    } else {
        echo 'Incorrect password!';
    }
        }
    $stmt-> close();



$result-> close();
$con-> close();

использованный код был взят из учебника, предназначенного для регистрации одного пользователя, и он отлично работал со мной, потому что моя цель былаПо-другому я пытался изменить его для своих нужд, но, к сожалению, появляются фатальные ошибки при привязке параметра.

Я действительно ценю уделение мне вашего времени.спасибо.

1 Ответ

2 голосов
/ 20 марта 2019

Проблема во внешних кавычках ' против "

Если подготовленный оператор завершается ошибкой, он возвращает логическое значение (false).

Документация

mysqli_prepare () возвращает объект оператора или FALSE, если произошла ошибка.

Я думаю, вы хотели сделать эту строку такой:

$stmt = $con->prepare("SELECT `TYPE` FROM `".$result."` WHERE `ID` = ?");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...