使用 PHP + sqlsrv 更新 MSSQL table

Updating MSSQL table with PHP + sqlsrv

我正在尝试做最简单的事情...

我有一个包含 2 个字段的表单。我想在这些字段中输入数据并让他们将该数据写入我的数据库(使用 sqlsrv 驱动程序的 mssql)。

连接到数据库没有问题。这是我的表单处理器(目前仅设置为更新数量 (qnty)):

require_once 'dbconnect.php';

$partno = $_POST["partno"];
$qnty = $_POST["qnty"];

$sql = 'UPDATE WestDevDB SET LocationQty = $_POST["qnty"]';

$result = sqlsrv_query($conn,$sql) or die(sqlsrv_errors());

我得到的只是错误:

Notice: Array to string conversion in filepath\file.php on line 8 Array

什么也没有写。

我曾尝试将 $_POST["qnty"] 更改为 $_POST["qnty"][0],认为这样可以解决问题,但没有任何区别。

对此有什么想法吗?

您应该使用 params 来避免 sql 注入和字符串连接错误。

$qnty = $_POST["qnty"];
//sanitize $qnty ( !is_null, is_numeric, ... )
$sql = "UPDATE WestDevDB SET LocationQty = ( ?)";
$params = array( $qnty );

$stmt = sqlsrv_query( $conn, $sql, $params);
if( $stmt === false ) {
     die( print_r( sqlsrv_errors(), true));
}

更多sqlsrv_query update samples at Microsoft MSDN.

基本 PHP 语法 101:' 引号字符串 NOT 插入变量。这意味着您的查询定义:

$sql = 'UPDATE WestDevDB SET LocationQty = $_POST["qnty"]';

正在发送文字字符 $_P 等...作为与 LocationQty 进行比较的值。这也意味着您的查询导致了语法错误,因为 $_ etc... 在几乎所有数据库中都不是有效的字段名称。

即使 ' 引用的字符串 DID 插入变量:

a) 无论如何你都会对 sql injection attacks 敞开心扉。
b) 数组键不能在字符串中引用,除非你使用 {} 语法:

$sql = "UPDATE ... = {$_POST['qnty']};"
or
$sql = "UPDATE ... = " . $_POST['qnty'];

None 上面的答案是回答问题。您没有 WHERE 语句。您正在尝试为数据库中的每一行设置 LocationQty table。这就是它不起作用的原因