【问题标题】:mysqli_stmt_prepare returns false from within a functionmysqli_stmt_prepare 从函数内返回 false
【发布时间】:2012-12-30 21:46:55
【问题描述】:

我正在尽最大努力对我的登录脚本进行面向对象并检查我的网站。因此,我创建了一个名为“attempt_login”的函数。此函数通过包含的外部 php 文件提供的“mysqli_connect”函数使用数据库连接,并返回 $link 变量。

但是,当在我的“attempt_login”中达到“mysqli_stmt_prepare”功能时。它总是返回 false,因此 if 语句永远不会运行。

mysql_connect.php

require_once '../conf.php';

$link = mysqli_connect($mysql_server,$mysql_user,$mysql_pass,$mysql_db);

if(mysqli_connect_error())
{
    //Fail
    echo mysqli_connect_error();

}else{
//Success

}

return $link;

以及“attempt_login”中失败的代码:

    $link = require_once 'functions/mysql/mysql_connect.php';

print_r($link);

$stmt = mysqli_stmt_init($link);

    echo mysqli_stmt_error($stmt);
    echo mysqli_error();

     //This if statement always fails.
if(mysqli_stmt_prepare($stmt,"SELECT member_salt FROM members WHERE username=?" ) )
{

    mysqli_stmt_bind_param($stmt,'s',$login_details['username']);

    mysqli_stmt_execute($stmt);

    $member_salt = NULL;

    mysqli_stmt_bind_result($stmt,$member_salt);

    mysqli_stmt_close($stmt);

}

调用函数非常简单。

attempt_login($login_details);

我已经尝试了很多方法来做到这一点,但它似乎只在它不在函数内时才有效。这违背了我试图将其用于功能的目的。如果我将错误输出移到 if 语句之后,它将打印:

没有选择数据库

即使在链接中明确设置了一个。我也可以做一个 print_r($link);它确实为 mysql 服务器打印了正确的数据。

对于过程和面向对象的 mysqli 样式也有同样的问题,并且对于“mysqli_prepare”也会失败。

我确实有 mysql 在该站点上运行,但是在函数中运行任何内容的任何尝试都失败了。

我已经搜索了几个小时试图找到答案,但找不到任何东西。我期待着您的回音!非常感谢。

~特拉维斯

【问题讨论】:

  • 您是否将$stmt 传递给您的attempt_login 函数?
  • @AlixAxel 抱歉,我忘记了一些代码并更新了我的问题以显示它。 $stmt 在函数内创建。

标签: php function mysqli


【解决方案1】:

我会说你还没有选择数据库。

$mysql_db 未在 ../conf.php 中设置,或者存在拼写错误,或者 $mysql_dbmysql_connect.php 中不可见。

【讨论】:

  • 当我回显配置数据时,它什么也没打印。不知何故无法访问它,将配置复制到同一路径似乎可行。你是对的,它无法访问配置文件。非常感谢! :)
  • 只是想再添加一个。向 conf.php 添加一个数组和一个返回函数以返回数据库详细信息。一定是一些奇怪的超出范围的错误。
【解决方案2】:

您似乎没有将$stmt 传递给您的函数,我建议您在scopes 上阅读此内容。

【讨论】:

  • 对不起,正如我回复您的评论一样,$stmt 变量是在函数本身内创建的。使用代码“$stmt = mysqli_stmt_init($link);”我更新了我的问题以显示更正。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
相关资源
最近更新 更多