从mysql中选择Single Value

时间:2014-12-10 13:19:50

标签: php mysql

我正在尝试从mysql中选择一个值 - 但是它不起作用:

public function doStuff($posted_name){    
    $result = mysql_query("SELECT id FROM people WHERE people_name = $posted_name");
    $singleValue = mysql_fetch_object($result);
}

posted_name, people_name is TEXT, id is INT

我发布了$ posted_name,我让我们与表人员中的列people_name进行比较,然后选择列“id”......

我希望将此ID存储为值,此处我尝试将其存储在$ singleValue中...但是它不起作用 - 是否有任何错误?

解决:见评论

编辑:

我将一些代码更改为mysqli进行测试 - 但现在我有一些错误:

我的代码如下:

private $db;


    // constructor
    function __construct() {
        include_once './db_connect.php';
        // connecting to database
        $db = new DB_Connect();
          $this->db = $db->connect();
    }

。 。 。 。

$result = this->db->query("INSERT INTO.....

上述行显示错误... 解析错误:语法错误,意外' - >' (T_OBJECT_OPERATOR)...

我做错了什么

我的db_connect.php

class DB_CONNECT {

    private $db;

    // constructor
    function __construct() {
        // connecting to database
        $this->connect();
    }


    /**
     * Function to connect with database
     */
    function connect() {
        // import database db variables
        require_once __DIR__ . '/db_config.php';

        // Connecting to mysql database
       $this->db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);

        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
        // Selecing database

        // returing connection cursor
        return $this->db;
    }



}

4 个答案:

答案 0 :(得分:1)

您没有针对$posted_name添加单引号,这样,此变量的任何值都将被视为MySQL关键字/数据库名称/表名称/字段名称。

如果值是字母值,则必须使用单引号。

更改

$result = mysql_query("SELECT id FROM people WHERE people_name = $posted_name");

$result = mysql_query("SELECT id FROM people WHERE people_name = '$posted_name'");

另外,请不要使用mysql_ *函数,因为出于安全原因这些函数已被弃用,并且将在以后的版本中删除。

答案 1 :(得分:1)

我认为它看起来应该更像:

$result = mysql_query("SELECT id FROM people WHERE people_name = '$posted_name' LIMIT 1");

注意$ post_name周围的引用。 但是在这种情况下你应该小心SQL注入,如果你没有清理你的输入,攻击者可以破解你的网站。所以我建议在SQL查询中使用它之前转义$ posted_name

答案 2 :(得分:1)

您需要在$ posting_name中添加单引号,如$" $ posted_name'。你应该知道mysql_fetch_object()是如何工作的以及它返回的是什么。

mysql_fetch_object()将结果行作为对象获取。它返回一个对象,该对象具有与获取的行对应的属性,并向前移动内部数据指针。

我已经编辑了你的代码......

public function doStuff($posted_name){    
    $result = mysql_query("SELECT id FROM people WHERE people_name = '$posted_name'");
    if($result){
         while ($row = mysql_fetch_object($result)){
              $id =  $row->id;
              echo $id;
          }
     }
 }

答案 3 :(得分:0)

我已编辑了您的代码,如下所示

 class INSERT{
    private $db;

    //constructor 
    function __construct(){
        include_once 'db_connect.php';

        $this->db = new DB_CONNECT();
        $this->db->connect();
    }



    function insert_data(){
        $sql = "INSERT INTO.....";
        $insert = $this->db->_insert_data($sql);
        if($insert){
            echo "data has been inserted";
        }
    }

}

$data = new INSERT();
$data->insert_data();

和db_config.php包括DB_HOST =>主机名,DB_USER =>数据库用户名,DB_PASSWORD =>数据库密码,DB_NAME =>数据库名称

 class DB_CONNECT {

        private $db;


        // constructor
        function __construct() {
            // import database db variables
           require_once __DIR__ . '/db_config.php';
        }


        /**
         * Function to connect with database
         */
        function connect() {

            // Connecting to mysql database and selecting the database
           $this->db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,DB_NAME);
           $this->check_error();


        }

        /**
         * Function to check the mysqli error
         */
        function check_error(){
           if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            } 
        }



         /**
         * Function to run the query
         */
        function _run_query($query){
            return mysqli_query( $this->db , $query);
        }



        /**
         * Function to insert data in the database
         */ 
        function _insert_data($statement){
            $result = $this->_run_query($statement);
            if(mysqli_affected_rows( $this->db ) == 1){
                return true;
            }else{
                return false;
            }
        }
   }