【问题标题】:PHP/MYSQL - MYSQLI - Prepared Statements - How to get the value of this query?PHP/MYSQL - MYSQLI - 准备好的语句 - 如何获取此查询的值?
【发布时间】:2012-07-06 19:51:13
【问题描述】:

我有一个查询来检查数据库是否与输入的用户名和密码匹配,该查询的对应值将是 0(不匹配)或 1(匹配)。这将在列 (itDoesExist) 中输出一个值,即 1 或 0。

我想知道的是,如何在 PHP 中获得该值?我想我在这里遗漏了一些东西,我似乎无法弄清楚那是什么。

代码如下:

$stmt = $link->prepare("
    SELECT CASE WHEN
    EXISTS (

    SELECT 1
    FROM user_details
    INNER JOIN user_info 
        ON user_details.id = user_info.id
    WHERE user_info.emailContact = ?
    AND user_details.password = ?
    )
    OR EXISTS (

    SELECT 1
    FROM user_details
    INNER JOIN user_business_info 
        ON user_details.id = user_business_info.id
    WHERE user_business_info.emailContact = ?
    AND user_details.password = ?
    )
    THEN 1
    ELSE 0
    END AS itDoesExist
");

if (!$stmt)
{
    $error = "{$link->errno}  :  {$link->error} (Error Searching For User)";
    include "C:/wamp/www/includes/html/main/error.html.php";
    exit();
}
if (!$stmt->bind_param("ssss", $username, $password, $username, $password))
{
    $error = "{$stmt->errno}  :  {$stmt->error}";
    include "C:/wamp/www/includes/html/main/error.html.php";
    exit();
}
if (!$stmt->execute())
{
    $error = "{$stmt->errno}  :  {$stmt->error} (Cant execute?)";
    include "C:/wamp/www/includes/html/main/error.html.php";
    exit();
}

提前感谢您提供这方面的任何帮助或信息!

【问题讨论】:

  • 简短回答。你不能。不过我希望你能做到。
  • @Ignas 开玩笑? :( 如何让语句返回布尔值?
  • 如果您正在谈论使用“?”输出查询,则不能替换为值。
  • 您是要查找使用替换值执行的查询还是要获取SELECT 语句的结果?
  • 还是只想获取查询结果?

标签: php mysqli prepared-statement


【解决方案1】:

如果您正在寻找查询结果,您可以使用bind_resultfetch,参见prepare statement 上的示例

$stmt->bind_result($itDoesExist);
$stmt->fetch();

if ($itDoesExist == 1)
{
    /* Handle the exists case */
}

【讨论】:

  • 完美,非常感谢您的回答和链接。作为旁注,您能否评论一下我对错误指针的使用。
  • @BlackberryFan - 我不做很多 php 编程,我不确定显示这些的公认标准是什么,但我觉得这还可以。我认为您可以通过使用两个内部连接进行选择并在找到任何一个时返回一个值来稍微改进您的查询。此外,您可能不应该在数据库中存储纯文本密码,这是一个巨大的安全漏洞。您应该对它们进行某种形式的加盐散列,可能是多轮散列,然后从数据库中获取用户 ID 的散列密码并将其与提供的密码的散列匹配
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多