为什么php函数" sqlsrv_query"有时仅使用2个参数但需要4次其他参数?

时间:2015-01-24 16:22:33

标签: php sql-server

我在Windows Server 2012 R2上运行带有SQL Server 2008 R2的IIS,我有2个php页面:

  • 主页面有2个字段集,第一个通过SELECT sql语句显示数据库表。第二个包含一个表单,用于将数据传递到第二个php页面。

  • 第二个php页面从表单接收数据并执行UPDATE sql语句,以便使用从表单接收的值将新行添加到数据库表中。

    < / LI>

主页的代码:

<html>
<head>
</head>
<body>
<fieldset>
 <legend align="left">Administraci&oacuten</legend>
 <div>
  <fieldset style="height:250px; overflow:scroll;">
   <legend align="left">List</legend>
   <center>
   <?php

   $servername="server2012\SQLEXPRESS";
   $connect=array("Database"=>"Tienda","UID"=>"sa","PWD"=>"ciclo.01");
   $conn=sqlsrv_connect($servername, $connect);
   $sql="select * from almacen";
   $res=sqlsrv_query($conn, $sql);
   echo "<table border='1' width='100%'>";
   echo "<tr><td><b>PRODUCTO</b></td>
             <td><b>CODIGO</b></td>
             <td><b>PRECIO</b></td>
             <td><b>ALMACEN</b></td>
             <td><b>EXISTENCIAS</b></td>
         </tr>";
    while ($linea=sqlsrv_fetch_array($res)) {
    echo "<tr>
            <td>$linea[0]</td>
            <td>$linea[3]</td>
            <td>$linea[1]</td>
            <td>$linea[2]</td>
            <td>$linea[4]</td>
         </tr>";
    }

    echo "</table>";

    ?>
    </center>
   </fieldset>
   <a href="almacen.php">
    <input type="button" value="Refresh" style="float:right">
   </a>
 </div>

 <div style="float:left; width:50%;">
  <fieldset>
   <legend align="left">Insert</legend>
   <form action="insercion.php" method="post">
   <table>
    <tr><td>C&oacutedigo</td><td><input type="text" name="cod"></td></tr>
    <tr><td>Producto</td><td><input type="text" name="pro"></td></tr>
    <tr><td>Precio</td><td><input type="text" name="pre"></td></tr>
    <tr><td>Almacen</td><td><input type="text" name="alm"></td></tr>
    <tr><td>Existencias</td><td><input type="text" name="exi"></td></tr>
   </table>
   <input type="submit" value="Insert" style="float:right;">
   </form>
  </fieldset>
 </div>
</fieldset>
</body>
</html>

主页成功执行SQL语句并打印表。

第二页的代码(包含UPDATE语句):

<html>
<head>
</head>
<body>
<center>
<?php

$cod=$_POST['cod']; 
$pro=$_POST['pro']; 
$pre=$_POST['pre'];
$alm=$_POST['alm'];
$exi=$_POST['exi']; 

$servername="server2012\SQLEXPRESS";
$connect=array("Database"=>"Tienda","UID"=>"sa","PWD"=>"ciclo.01");
$conn=sqlsrv_connect($servername, $connect);
$sql="insert into almacen values('$pro','$pre','$alm','$cod','$exi')";
$params=array();
$options=array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$res=sqlsrv_query($conn, $sql, $params, $options);
//$res=sqlsrv_query($conn, $sql);
$rows=sqlsrv_num_rows($res);

echo "<p>$rows row inserted</p>";
echo "<a href='almacen.php'><input type='button' value='Return'></a>";

?>

</center> 
</body>
</html>

此第二页按原样运行,注释掉包含2个参数的原始sqlsrv_query()并添加行$params=array();$options=array("Scrollable" => SQLSRV_CURSOR_KEYSET);,以便可以使用包含4个参数的sqlsrv_query()

那么主页中sqlsrv_query只使用2个参数但第二页中的一个参数失败的原因是什么? (第二页上的输出消息将是row inserted而不是row inserted,并且在返回主页后,该表将不包含新行。

如果我更改主页面中的表单以便它只包含1个字段并且我将第二页中的UPDATE sql语句更改为DELETE语句,这似乎也是如此将使用通过主页面中的单字段表单传递的主键值。

基本上,我想知道线$params=array();是什么 和$options=array("Scrollable" => SQLSRV_CURSOR_KEYSET);这样做以及为什么他们似乎并不总是需要sqlsrv_query函数。

提前致谢

1 个答案:

答案 0 :(得分:0)

试试这个,它对我有用。

$sql="insert into almacen values(?,?,?,?,?)";
$params=array(
                array($pro,SQLSRV_PARAM_IN),
                array($pre,SQLSRV_PARAM_IN),
                array($alm,SQLSRV_PARAM_IN),
                array($cod,SQLSRV_PARAM_IN),
                array($exi,SQLSRV_PARAM_IN)
               );
$options=array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$res=sqlsrv_query($conn, $sql, $params, $options);

希望这可以帮助你