Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MYSql视图中选择PHP不会返回任何结果_Php_Mysql_Mysqli_View_Resultset - Fatal编程技术网

从MYSql视图中选择PHP不会返回任何结果

从MYSql视图中选择PHP不会返回任何结果,php,mysql,mysqli,view,resultset,Php,Mysql,Mysqli,View,Resultset,这很奇怪,我似乎找不到问题所在。 下面是一个简单的例子: 在我的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

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

在我的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>';
此代码返回意外结果:

$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>';
这是视图的Create语句:

Create or replace View vw_test
 as
Select fk_member_id FROM member_role 
;
所以我完全不知所措。 在过去的四五年里,我一直在运行相同的代码,没有任何问题。 (这是为一个社区体育协会举办的,每年只举办几个月。) 在再次打开网页之前,我对代码进行了双重检查……现在我所有访问视图的代码都不再工作了

请帮忙!谢谢

更新

我现在使用以下代码段:

    $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>';
$link=mysqli\u connect(主机、用户、密码、数据库);
$sql\u stmt\u bind=“从vw\u测试限制1中选择fk\u成员id作为id”;
$stmt=$link->stmt_init();
$pre=$stmt->prepare($sql\u stmt\u bind);
如果(false==$pre){
die('prepare()失败:'.htmlspecialchars($stmt->error));
}
$exe=$stmt->execute();
如果(false==$exe){
die('execute()失败:'.htmlspecialchars($stmt->error));
}
$stmt->store_result();
$bind\u r=$stmt->bind\u结果($mem\u id);
if(false==$bind\u r){
die('bind_result()失败:'.htmlspecialchars($stmt->error));
}
$stmt->fetch();
回声“
”; 回显“行:”$stmt->num_行; 回声“
”; //回显“lastname:”$姓氏; 回显“ID:”$成员id; 回声“
”;
编辑

解决问题(失败:准备好的语句需要重新准备) -使用PDO适配器而不是Mysql适配器
-将此属性添加到连接字符串
$link->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,true)

从vw\U测试限制1中选择fk\U成员id作为idphpmyadmin@devpro-是的,很好用。phpmyadmin中的视图没有任何问题。我想不出比这个查询更简单的了。两个r都在同一个文件中?@devpro-对不起,我不知道你的意思。表和视图在同一数据库中是。该视图与工作代码使用的select语句完全相同。我以前尝试过这种方法,但可能编码不正确。无论如何,我尝试了您的建议,收到了返回的错误:execute()失败:需要重新准备Prepared语句“my.cnf”中的表\u definition\u缓存中有什么值?这在托管web服务上。据我所知,我没有访问权限。感谢您的建议,我收到了以下错误:致命错误:调用未定义的方法mysqli::setAttribute()。也许我需要切换到使用PDO而不是mysqli?请发布您的连接字符串
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>';