gpt4 book ai didi

PHP 从 MYSql View 中选择不返回任何内容

转载 作者:行者123 更新时间:2023-11-29 21:15:42 24 4
gpt4 key购买 nike

这很奇怪,我似乎找不到问题所在。这是一个简单的例子:

在我的 PHP 代码中,我可以从表中进行选择并返回结果。但是,如果我将 SQL 语句更改为从 View 中选择,则不会返回任何结果。

此代码返回结果:

$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

这是 View 的创建语句:

Create or replace View vw_test
as
Select fk_member_id FROM member_role
;

所以我完全不知所措。过去四五年我一直在运行相同的代码,没有出现任何问题。(这是针对社区体育协会的,一年只运行几个月。)在再次打开网页之前,我仔细检查了代码......现在我所有访问 View 的代码都不再起作用。

请帮忙!谢谢。

更新

我现在正在使用此代码段:

    $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

有什么想法吗?谢谢。

最佳答案

尝试检查您的代码以了解问题出在哪里。

试试这个:

    $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);

关于PHP 从 MYSql View 中选择不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35963419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com