我在Windows Server 2012 R2上运行带有SQL Server 2008 R2的IIS,我有2个php页面:
主页面有2个字段集,第一个通过SELECT
sql语句显示数据库表。第二个包含一个表单,用于将数据传递到第二个php页面。
第二个php页面从表单接收数据并执行UPDATE
sql语句,以便使用从表单接收的值将新行添加到数据库表中。
主页的代码:
<html>
<head>
</head>
<body>
<fieldset>
<legend align="left">Administración</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ódigo</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函数。
提前致谢
答案 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);
希望这可以帮助你