【问题标题】:SQL - Select doesn't retrieve resultsSQL - 选择不检索结果
【发布时间】:2019-11-25 17:26:35
【问题描述】:

我使用sqlsrv_num_rows 来检查数据库中是否存在用户。

当我在我的数据库中运行查询时,我得到 1 个结果,但在我的 PHP 中我什么也没得到(echo 不打印任何内容)。这是为什么呢?

$query = "SELECT TOP 1 id, tourOp FROM users WHERE (valid = 1) AND (email = '".trim($_POST['email'])."') AND (password = '".trim($_POST['password'])."')";
$stmt  = sqlsrv_query( $conn, $query);      

echo "num: ".sqlsrv_num_rows( $stmt );

if (!sqlsrv_num_rows( $stmt )) {
    return (false); 
} else {

}

查询示例

SELECT TOP 1 id, name FROM users WHERE (valid = 1) AND (email = 'roi@some_email.com') AND (password = '8521')

我正在使用 PHP 和 MSSQL。

【问题讨论】:

  • 我添加了if ($stmt === false){ echo "<pre>";print_r( sqlsrv_errors()); echo "</pre>"; exit; } ,但没有新结果...

标签: php sql-server sqlsrv


【解决方案1】:

解释:

  • 函数sqlsrv_num_rows() 需要客户端、静态或键集游标,如果您使用正向游标或动态游标(默认游标为正向游标),它将返回false。使用附加的$options 参数执行sqlsrv_query() 并使用"Scrollable" => SQLSRV_CURSOR_KEYSET 设置适当的游标类型
  • 使用参数化语句。函数sqlsrv_query() 既做语句准备又做语句执行,可用于执行参数化查询。
  • 如果要检查结果集是否有一行或多行,可以使用sqlsrv_has_rows()

示例,基于您的代码:

<?php
$query = "
    SELECT TOP 1 id, tourOp 
    FROM users 
    WHERE (valid = 1) AND (email = ?) AND (password = ?)";
$params = array(trim($_POST['email']), trim($_POST['password']));
$options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$stmt = sqlsrv_query( $conn, $query, $params, $options);      
if ($exec === false){
    echo print_r( sqlsrv_errors()); 
    echo "<br>";
    return (false);
}

$count = sqlsrv_num_rows($stmt);
if ($count === false) {
    echo print_r( sqlsrv_errors()); 
    echo "<br>";
    return (false);
} else {
    echo "num: ".$count;
}
?>

注意事项:

不要以纯文本形式发送用户凭据。

【讨论】:

  • 谢谢。你帮了我很多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2013-08-09
  • 2013-04-02
相关资源
最近更新 更多