Выбор PHP из представления MYSql ничего не возвращает

Это странно, и я просто не могу понять, что не так.
Вот простой пример:

В моем PHP-коде я могу выбрать из таблицы и получить результаты.
Но, если я изменю свой оператор SQL для выбора из представления, результаты не будут возвращены.

Этот код возвращает результаты:

$link = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
$sql_stmt_bind = "Select fk_member_id as ID FROM member_role LIMIT 1";

$stmt = $link->stmt_init();
$stmt->prepare($sql_stmt_bind);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($mem_id);
$stmt->fetch();

echo '<br>';
echo 'rows: ' . $stmt->num_rows;
echo '<br>';
//echo 'lastname: ' . $lastname;
echo 'ID: ' . $mem_id;
echo '<br>';

Результаты, достижения:

rows: 1
ID: 1

Этот код возвращает неожиданные результаты:

$link = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
$sql_stmt_bind = "Select fk_member_id as ID FROM vw_test LIMIT 1";

$stmt = $link->stmt_init();
$stmt->prepare($sql_stmt_bind);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($mem_id);
$stmt->fetch();

echo '<br>';
echo 'rows: ' . $stmt->num_rows;
echo '<br>';
//echo 'lastname: ' . $lastname;
echo 'ID: ' . $mem_id;
echo '<br>';

Результаты, достижения:

rows: 0
ID: 0

Это оператор Create для View:

Create or replace View vw_test
as
Select fk_member_id FROM member_role
;

Так что я в полной растерянности.
Я использую тот же код в течение последних 4 или 5 лет без проблем.
(Это для общественной спортивной ассоциации и работает только в течение нескольких месяцев в году.)
Я дважды проверил код, прежде чем снова включил веб-страницы … и теперь весь мой код, обращающийся к представлениям, больше не работает.

Пожалуйста помоги! Благодарю.

ОБНОВИТЬ

Я сейчас использую этот сегмент кода:

    $stmt = $link->stmt_init();
$pre = $stmt->prepare($sql_stmt_bind);
if ( false===$pre ) {
die('prepare() failed: ' . htmlspecialchars($stmt->error));
}

$exe = $stmt->execute();
if ( false===$exe ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}

$stmt->store_result();

$bind_r = $stmt->bind_result($mem_id);
if ( false===$bind_r ) {
die('bind_result() failed: ' . htmlspecialchars($stmt->error));
}

$stmt->fetch();

Ошибка, которую я сейчас получаю:

execute() failed: Prepared statement needs to be re-prepared

Есть идеи? Благодарю.

0

Решение

Попробуйте проверить свой код, чтобы узнать, где проблема.

Попробуй это:

    $link = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
$sql_stmt_bind = "Select fk_member_id as ID FROM vw_test LIMIT 1";

$stmt = $link->stmt_init();
$pre = $stmt->prepare($sql_stmt_bind);

if ( false===$pre ) {
die('prepare() failed: ' . htmlspecialchars($stmt->error));
}

$exe =  $stmt->execute();

if ( false===$exe ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}

$stmt->store_result();
$bind_r = $stmt->bind_result($mem_id);

if ( false===$bind_r ) {
die('bind_result() failed: ' . htmlspecialchars($stmt->error));
}

$stmt->fetch();

echo '<br>';
echo 'rows: ' . $stmt->num_rows;
echo '<br>';
//echo 'lastname: ' . $lastname;
echo 'ID: ' . $mem_id;
echo '<br>';

РЕДАКТИРОВАТЬ

Обойти проблему (не удалось: подготовленное заявление необходимо заново подготовить)
— используя адаптер PDO вместо адаптера Mysql
— Добавьте этот атрибут в строку подключения $link->setAttribute( PDO::ATTR_EMULATE_PREPARES, true);

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]