使用 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));
}
基本 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。这就是它不起作用的原因
我正在尝试做最简单的事情...
我有一个包含 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));
}
基本 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。这就是它不起作用的原因