错误的参数个数或无效的参数属性值: 'rs'怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误的参数个数或无效的参数属性值: 'rs'怎么解决相关的知识,希望对你有一定的参考价值。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp"-->
<%if session("sname")="" then
response.write "<script language=javascript>window.alert('网络超时或你还未登录,请重新登陆!');window.location.href='index.asp';</script>"
response.end
end if
%>
<%
set rs=server.createobject("adodb.connection")
sql="select * from student where sname='"&session("name")&"'"
rs.open sql,db,1,1
%>
这一行报错 <td width="288"><input name="sname" type="text" value="<%=rs("sname")%>" /> <span class="STYLE1">*</span></td>说是错误的参数个数或无效的参数属性值: 'rs'
这是我的conn.asp:<%
set db=server.createobject("adodb.connection")
db.open "DBQ="&server.mappath("student.mdb")&";driver=microsoft access driver (*.mdb)"
%>

现在又报错了<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%if session("sname")="" then
response.write "<script language=JavaScript>window.alert('网络超时或你还未登录,请重新登陆!');window.location.href='index.asp';</script>"
response.end
end if
%>
<%
set rs=server.createobject("adodb.recordset")
sql="select * from student where sname='"&session("name")&"'"
rs.open sql,db,1,1
%>
rs.open sql,db,1,1这一行报错
ADODB.Recordset (0x800A0BB9)
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。

参考技术A sql="select * from student where sname='"&session("name")&"'"
你上面是session("sname")这里怎么变成session("name")了??
改成
sql="select * from student where sname='"&session("sname")&"'"本回答被提问者采纳

PHP / PDO动态绑定值(无效的参数计数错误)

尝试更新旧的mysql_query代码以使其符合PDO,我的任务(卡住)。

这是一个混乱的搜索表单,如果(或没有)与表单一起提交任何关键字,则根据字段值动态创建查询字符串。 (即:任何关键字由空格解析,并用于BOTH列搜索)

因此,如果输入了“狗”的搜索词,它将搜索“狗”关键词的名称和标题。

我想我已经完成了它的工作..在大多数情况下保持主要的“功能”...并在需要时进行更新。

我的方法是采用动态向查询字符串添加更多条件的函数....并将此值字段名称和值添加到数组中,以便稍后我可以循环遍历它并动态地使用它绑定它。

我现在坚持使用非常流行的无效参数错误!!

然而,它没有说计数不匹配..它说它根本就是定义的。

我不清楚我的错误来自哪里..(或者如何轻松查看计算/解析的查询字符串..或实际的绑定参数)我可以输出sql语句(在解析任何数据之前)..或者回显我在数组中的值,我循环到(可能)将数据绑定到PDO调用。

当我回应查询(字符串)..甚至我试图动态绑定的值...它们看起来都是合法的:

Query Check: SELECT * FROM pid_information WHERE 1=1 AND (((title LIKE :title0) OR (name LIKE :name0)) AND ((title LIKE :title1) OR (name LIKE :name1))) ORDER BY title, name, link
PARAM CHECK: ':title0' -> %cat%
PARAM CHECK: ':name0' -> %cat%
PARAM CHECK: ':title1' -> %dog%
PARAM CHECK: ':name1' -> %dog%

重新上限:addCriteria()函数用于动态(concat)添加到查询'string'

我还填充了一个数组,以便稍后用于循环和bindValues。

是的,我知道它很长..是的,我知道丑陋......(拜托,请忍受我!)大声笑

//dynamically add criteria to query
$boundSearchValues = array();
function addCriteria($targetFields, $criteriaString, $targetOperator='LIKE'){
    global $boundSearchValues;
    $fieldCount = 0;
    $tempString = "";
    if($criteriaString != ""){
        $criteriaArray = explode(" ", $criteriaString);
        $tempString .= " AND (";
        foreach($criteriaArray as $criteriaIndex => $criteriaValue){
            //is array of fields
            if(is_array($targetFields)){
                $tempString .= "(";
                foreach ($targetFields as $targetField => $fieldName){
                    if($targetOperator != 'LIKE') {
                        $tempString .= "($fieldName ".$targetOperator." :". $fieldName.$fieldCount .")";                            
                        $boundSearchValues[] = [$fieldName.$fieldCount, $criteriaValue];                        
                    }else{
                        $tempString .= "($fieldName LIKE :". $fieldName.$fieldCount .")";
                        $boundSearchValues[] = [$fieldName.$fieldCount, '%'.$criteriaValue.'%'];
                    }
                    if($targetField+1 < count($targetFields)){
                        $tempString .= " OR ";
                    }                       
                }                   
                $tempString .= ")";
                if($criteriaIndex+1 < count($criteriaArray)){
                    $tempString .= " AND ";
                }

            //not an array of fields
            }else{
                if($targetOperator != 'LIKE') {
                    $tempString .= "(".$targetFields . $targetOperator . " :" . $fieldName.$fieldCount . ")";                       
                    $boundSearchValues[] = [$fieldName.$fieldCount, $criteriaValue];
                } else {
                    $tempString .= "(". $targetFields . " LIKE " . $fieldName . $fieldCount . ")";                      
                    $boundSearchValues[] = [$fieldName.$fieldCount, '%'.$criteriaValue.'%'];
                }
            }

            $fieldCount++; //increment counter
        }           
        $tempString .= ")";

    }
    return $tempString;
}   

//start serach query
$searchDetails_sql = "SELECT * FROM $tablename ";   
//dynamically update query string
if($clean_keywords != "") {
    $whereClause = addCriteria(array('title', 'name'), $clean_keywords);
}else{            
    if($title != "" && $title != "all"){
        $whereClause .= " AND title = :" . $title;
    }        
    if($name != "" && $name != "all"){
        $whereClause .= " AND name = :" . $name;
    }            
    if($link != "" && $link != "all"){
        $whereClause .= " AND link = :" . $link ;
    }
}   
$searchDetails_sql .= "WHERE 1=1 ". $whereClause;
$searchDetails_sql .= " ORDER BY title, name, link";    
$searchDetails_stmt = $conn->prepare($searchDetails_sql);

//dynamically bind values   
for($i=0; $i<count($boundSearchValues); $i++){
    $searchDetails_stmt->bindValue("':".$boundSearchValues[$i][0] ."'", $boundSearchValues[$i][1]);
    //$searchDetails_stmt->bindParam("':".$boundSearchValues[$i][0] ."'", $boundSearchValues[$i][1]);
    echo '<br>PARAM CHECK: ' . $boundSearchValues[$i][0] . " / " .  $boundSearchValues[$i][1];
}   
$searchDetails_stmt->execute();
$searchDetails_stmt->setFetchMode(PDO::FETCH_ASSOC);        
$searchDetails = $searchDetails_stmt->fetchAll(); //returns multi-dimensional array (and correct count)
答案

我想你刚刚搞砸了这一行中的字符串连接

$searchDetails_stmt
    ->bindValue("':".$boundSearchValues[$i][0] ."'", $boundSearchValues[$i][1]);

你真的不需要:所以你可以做到这一点

$searchDetails_stmt
    ->bindValue($boundSearchValues[$i][0], $boundSearchValues[$i][1]);

或者修复连接并保持:

$searchDetails_stmt
    ->bindValue(":".$boundSearchValues[$i][0], $boundSearchValues[$i][1]);

以上是关于错误的参数个数或无效的参数属性值: 'rs'怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

关于resultset 的deleteRow方法报无效的游标位置的错误

VB中怎么获得系统日期与时间

如何在 s-s-rS 中创建下拉过滤器列表?

替换编译错误:参数数量错误或属性分配无效

rs.getString(1) 有啥功能?

ORA-00909:参数个数无效