【问题标题】:What is wrong with my PHP?我的 PHP 有什么问题?
【发布时间】:2013-06-29 00:27:18
【问题描述】:

我是 PHP 新手,我看了一个关于 SQL 和 PHP 的教程,并制作了这些文件:

插入_news.php:

    require_once __DIR__ .'/db_connect.php';

    $sql = "INSERT INTO news ( descriere, data, autor) VALUES (?, ?, ?)" ;
    $params = array("The description", "12/11/2011", "COsmin");


    $serverName = "my server";
    $connectionInfo = array( "Database"=>"myusername", "UID"=>"myusername", "PWD"=>"mypassword");

    $conn = sqlsrv_connect($serverName, $connectionInfo );
    $stmt = sqlsrv_query( $conn , $sql, $params );

    if( $stmt == false ) {
        echo("NOT");
        die( print_r( sqlsrv_errors(), true));
    }

?>

这段代码似乎运行良好。

现在我的问题是我想创建一个类,使与数据库的连接更容易。 代码如下:

db_connect.php

<?php
class DB_CONNECT {
    function __construct(){
        $this->connect();
    }

    function __Destruct(){
        $this->close();
    }

    function connect() {
        $serverName = "my server";
        $connectionInfo = array( "Database"=>"my db", "UID"=>"my user", "PWD"=>"my pass" );

        $con = sqlsrv_connect($serverName, $connectionInfo );
                return $con;
    }
    function close(){
        sqlsrv_close();
    }
}
?>

如果我想像这样从我的 insert_new.php 文件中调用这个类:

    <?php

    require_once __DIR__ .'/db_connect.php';

    $sql = "INSERT INTO Stiri ( descriere, data, autor) VALUES (?, ?, ?)" ;
    $params = array("ASta e o stvnmbvire aduagata printr-un web service php", "12/11/2011", "COsn");

    $conn = new DB_CONNECT() ;
    $stmt = sqlsrv_query( $conn , $sql, $params );

    if( $stmt == false ) {
        echo("NU");
        die( print_r( sqlsrv_errors(), true));
    }
?>

当我尝试这个时,我的服务器返回给我:

警告:sqlsrv_query() 期望参数 1 是资源,在第 9 行的 C:\xampp\htdocs\android_connect\insert_news.php 中给出的对象 NUArray ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => 传递给 sqlsrv_query 的参数无效。[消息] => 向 sqlsrv_query 传递了一个无效参数。))

我提到我使用 XAMPP 编译 php 文件,数据库是 SQL Server 2005... 对不起,如果我把你的时间浪费在我的傻事上......

【问题讨论】:

    标签: php sql xampp


    【解决方案1】:

    似乎您并没有真正连接到数据库。

    这是你的问题

    $conn = new DB_CONNECT();
    $stmt = sqlsrv_query( $conn , $sql, $params );
    

    $conn 在这里不是一个连接,它只是一个 DB_CONNECT 对象。您需要调用connect() 方法来获得连接。所以试试这个:

    $conn = new DB_CONNECT();
    $stmt = sqlsrv_query( $conn->connect() , $sql, $params );
    

    【讨论】:

      【解决方案2】:

      您将自定义对象提供给函数 sqlsrv_query 而不是数据库实例。在您的课程中,您应该将 $con 变量设为公共属性,如下所示:

      class DB_CONNECT {
          public $con = false;
          function __construct(){
              $this->connect();
          }
      
          function __Destruct(){
              $this->close();
          }
      
          function connect() {
              $serverName = "my server";
              $connectionInfo = array( "Database"=>"my db", "UID"=>"my user", "PWD"=>"my pass" );
      
              $this->con = sqlsrv_connect($serverName, $connectionInfo );
                      return $con;
          }
          function close(){
              sqlsrv_close();
          }
      }
      

      并将此属性赋予您的查询函数,如下所示:

      if($conn->con) {
         $stmt = sqlsrv_query( $conn->con , $sql, $params );
      } else {
         // error
      }
      

      【讨论】:

        猜你喜欢
        • 2018-08-19
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 2020-12-28
        相关资源
        最近更新 更多