警告:sqlsrv_fetch_array() 在多个 SQL 查询中使用explode

为什么我会收到此错误?


警告:sqlsrv_fetch_array() 期望参数 1 是资源,给定的布尔值。?


我在尝试INSERT INTO employeemasterfile (employeeidno) VALUES ('$deptcode'+'$empno');数据库时手动测试了它,使用以下值$deptcode::D001 和$empno:0000017,它完美地工作。


这是 SQL 代码。


<?php 

if(isset($_POST['referenceno']))

$data=$_POST['referenceno'];

$explode= explode(":", $data);

$user = $user['fingerscanno'];


$deptcode=$explode[0];

$emp=$explode[1];

$empno = str_pad(++$emp,7,"0",STR_PAD_LEFT);

$jobposition=$explode[2];

$departmentname=$explode[3];


$sql = "SELECT DISTINCT 

LEFT (departmentcode,4) as deptcode,

MAX(RIGHT(employeeidno, 7)) as empno,

section,  departmentname, paymentmode,

hrdjobpositionentry.jobposition as jobposition

FROM departmentmasterfile, hrdjobpositionentry,employeemasterfile 

WHERE hrdjobpositionentry.department=departmentmasterfile.departmentname AND

LEFT (employeemasterfile.employeeidno,4) = LEFT (departmentmasterfile.departmentcode,4) AND

LEFT (departmentcode,4) = '$deptcode' AND hrdjobpositionentry.jobposition='$jobposition'

GROUP BY LEFT (departmentcode,4), section, departmentname, paymentmode, hrdjobpositionentry.jobposition

ORDER BY LEFT (departmentcode,4);


INSERT INTO employeemasterfile (employeeidno) VALUES ('$deptcode'+'$empno');

";

    $query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));


    while($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)){

该while()条款应该没有问题,对吗?因为我只是在第二个 SQL 查询中插入。


此 SQL 查询仅在我删除时有效 INSERT INTO employeemasterfile (employeeidno) VALUES ('$deptcode'+'$empno');


翻翻过去那场雪
浏览 124回答 1
1回答

杨__羊羊

说明:你的错误的原因是sqlsrv_query() return false,这意味着你的语句没有正确执行:返回值(sqlsrv_query):语句资源。如果无法创建和/或执行该语句,则返回 false。如果语句未正确执行,您需要检查 的结果sqlsrv_query()并获取错误sqlsrv_errors()。<?php...$query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));if ($query === false) {&nbsp; &nbsp; echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);&nbsp; &nbsp; exit;}...?>补充说明:尝试使用参数化查询。函数sqlsrv_query()支持使用参数:sqlsrv_query 函数非常适合一次性查询,除非特殊情况适用,否则应该是执行查询的默认选择。此函数提供了一种以最少代码执行查询的简化方法。sqlsrv_query 函数同时进行语句准备和语句执行,并可用于执行参数化查询。示例(基于您的代码):<?php&nbsp;if (!isset($_POST['referenceno'])) {&nbsp; &nbsp; echo "Error."&nbsp; &nbsp; exit;}&nbsp; &nbsp;$data = $_POST['referenceno'];//$user = $user['fingerscanno'];$explode&nbsp; &nbsp; &nbsp; &nbsp; = explode(":", $data);$deptcode&nbsp; &nbsp; &nbsp; &nbsp;= $explode[0];$emp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = $explode[1];$empno&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = str_pad(++$emp, 7, "0", STR_PAD_LEFT);$jobposition&nbsp; &nbsp; = $explode[2];$departmentname = $explode[3];$sql = "&nbsp; &nbsp; SELECT&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; DISTINCT LEFT (departmentcode,4) as deptcode,&nbsp; &nbsp; &nbsp; &nbsp; MAX(RIGHT(employeeidno, 7)) as empno,&nbsp; &nbsp; &nbsp; &nbsp; section,&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; departmentname,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; paymentmode,&nbsp; &nbsp; &nbsp; &nbsp; hrdjobpositionentry.jobposition as jobposition&nbsp; &nbsp; FROM departmentmasterfile, hrdjobpositionentry,employeemasterfile&nbsp;&nbsp; &nbsp; WHERE&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; hrdjobpositionentry.department = departmentmasterfile.departmentname AND&nbsp; &nbsp; &nbsp; &nbsp; LEFT (employeemasterfile.employeeidno,4) = LEFT (departmentmasterfile.departmentcode,4) AND&nbsp; &nbsp; &nbsp; &nbsp; LEFT (departmentcode,4) = ? AND hrdjobpositionentry.jobposition = ?&nbsp; &nbsp; GROUP BY LEFT (departmentcode,4), section, departmentname, paymentmode, hrdjobpositionentry.jobposition&nbsp; &nbsp; ORDER BY LEFT (departmentcode,4);&nbsp; &nbsp; INSERT INTO employeemasterfile (employeeidno) VALUES (? + ?);";$params = array(&nbsp; &nbsp; $deptcode,&nbsp; &nbsp; $jobposition,&nbsp; &nbsp; $deptcode,&nbsp; &nbsp; $empno);$query = sqlsrv_query($conn, $sql, $params, array("Scrollable" => SQLSRV_CURSOR_KEYSET));if ($query === false) {&nbsp; &nbsp; echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);&nbsp; &nbsp; exit;}while($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {&nbsp; &nbsp; var_dump($row);&nbsp; &nbsp; echo "<br>";}sqlsrv_free_stmt($query);?>
打开App,查看更多内容
随时随地看视频慕课网APP