SQL оператор SELECT WHERE работает, а подготовленный оператор - нет? - PullRequest
2 голосов
/ 21 марта 2020

(Первый вопрос, извините, если это не имеет смысла). Пытаясь получить данные для всех пользователей, принадлежащих к той же компании, что и текущий пользователь, используя переменные сеанса, чтобы получить название компании, которое работает нормально, $ company имеет правильное значение в it.

$company = $_SESSION['company'];

Если я запускаю обычный оператор SELECT WHERE, он прекрасно работает:

$sql = "SELECT FirstName, SecondName, Progress FROM progress WHERE Company = ''";
$result = $conn->query($sql);

Это выводит правильные результаты из базы данных. Однако, когда я пытаюсь сделать это подготовленным оператором, он не дает никаких результатов:

$sql = $conn->prepare("SELECT FirstName, SecondName, Progress FROM progress WHERE Company = ?");
$sql->bind_param("s", $company);

Вот весь фрагмент кода с закомментированным рабочим запросом:

                $conn = mysqli_connect($servername, $username, $password, $dbname);

                if (!$conn) {
                    die("Connection failed: " . mysqli_connect_error());
                }

                $company = $_SESSION['company'];

                // $sql = "SELECT FirstName, SecondName, Progress FROM progress WHERE Company = ''";
                // $result = $conn->query($sql);


                $sql = $conn->prepare("SELECT FirstName, SecondName, Progress FROM progress WHERE Company = ?");
                $sql->bind_param("s", $company);

                $sql->bind_result($result);
                $sql->execute();
                $sql->fetch();


                if (mysqli_num_rows($result) > 0) {
                    // output data of each row
                    while($row = mysqli_fetch_assoc($result)) {
                    echo "Name: " . $row["FirstName"]. " " . $row["SecondName"]. " - Progress: " . $row["Progress"]. "<br>";
                    }
                } else {
                    echo "0 results";
                }

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Как насчет этого? Я сделал это более кратким.

        $conn = mysqli_connect($servername, $username, $password, $dbname);

        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }

        $company = $_SESSION['company'];

        $sql = $conn->prepare("SELECT FirstName, SecondName, Progress FROM progress WHERE Company = ?");
        $sql->bind_param("s", $company);

        $sql->execute();

        $sql->bind_result($firstName, $secondName, $progress);

        if($sql->fetch()==NULL) {
            echo "0 results";
        } else {
           do {
               echo "Name: " . $firstName. " " . $secondName. " - Progress: " . $progress. "<br>";
           } while($sql->fetch());
        }
0 голосов
/ 21 марта 2020

Согласно моему комментарию, вызов выполняется до результата привязки

//After bind_param();
$sql->execute();
$result = $sql->get_result();
print_r($result->fetch_assoc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...