【问题标题】:sqlsrv and param count errorsqlsrv 和参数计数错误
【发布时间】:2015-06-26 05:22:08
【问题描述】:

美好的一天,

首先,我可以成功连接到我的数据库,我可以 打印出我表中的所有数据..

这是我的问题,当我尝试执行此操作时遇到警告和致命错误

$sql = sqlsrv_query("SELECT [name] FROM [Test].[dbo].[TestTable] WHERE [name] = '$user', $conn);
$rows = sqlsrv_num_rows($conn,$sql);

这是我得到的错误,

sqlsrv_query() 期望参数 1 是资源....参数计数和 参数计数不匹配

【问题讨论】:

    标签: php sql-server-2005 sqlsrv


    【解决方案1】:

    停止连接参数,这不安全。了解sql injection。由于您的用户名参数包含? 字符,可能会引发错误。

    另外,对sqlsrv_query syntax 是:

    混合sqlsrv_query(资源$conn,字符串$sql[,数组$params[,数组$options]])

    其中 sql 是 第二个参数,而不是第一个。您的代码应如下所示:

    $sql = "SELECT [name] FROM [Test].[dbo].[TestTable] WHERE [name] = ?";
    $params = array(1, $user);
    
    $stmt = sqlsrv_query( $conn, $sql, $params);
    if( $stmt === false ) {
         die( print_r( sqlsrv_errors(), true));
    }
    

    【讨论】:

    • 感谢您的评论,顺便说一句,$user = $_POST['Name'],我要做的是,如果名称正确,它将与数据库匹配,以便用户可以登录。是的,在我可以让这个简单的事情工作之后,我会尽快修复 sql 注入。 :)
    • 嗯,我现在有登录错误,我想它现在可以工作(不确定)只是为了添加,if($stmt ==1){ header("Location: Profile.php "; }else{ 插入了无效的凭据。}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2012-11-30
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多