【问题标题】:Updating MSSQL table with PHP + sqlsrv使用 PHP + sqlsrv 更新 MSSQL 表
【发布时间】:2015-04-17 22:52:02
【问题描述】:

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

我有一个包含 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());

我得到的只是错误:

注意:第 8 行 filepath\file.php 中的数组到字符串转换 数组

什么也没写。

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

对此有什么想法吗?

【问题讨论】:

    标签: php sql-server sqlsrv


    【解决方案1】:

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

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

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

    即使'-quoted 字符串确实插入了变量:

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

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

    【讨论】:

      【解决方案2】:

      您应该使用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.

      【讨论】:

        【解决方案3】:

        以上答案都没有回答问题。你没有 WHERE 语句。您正在尝试为数据库表中的每一行设置 LocationQty。这就是为什么它不起作用

        【讨论】:

        • 请使用格式化工具正确编辑和格式化您的答案。
        猜你喜欢
        • 2016-09-07
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        • 2017-09-06
        • 1970-01-01
        相关资源
        最近更新 更多