选择 ? FROM表WHERE id =?工作不正常

时间:2016-11-01 08:38:51

标签: php mysqli

我有一个小问题。我想通过mysqli查询从我的数据库中获取特定信息:

public function get_searchorder_single_information($soid, $information) {

        global $mysqli;

        $stmt = $mysqli->prepare("SELECT ? FROM pr_hr_searchorders WHERE id = ?");
        $stmt->bind_param('si', $information, $soid);
        $stmt->execute();
        $stmt->bind_result($result);
        $stmt->fetch();
        echo $result;

        $stmt->close();

    }

在我的示例中,$information已设置为' job',但它也可以包含其他值(例如' salary')。当我尝试将此查询与此变量一起使用时,回显输出只是“工作”'而不是我的数据库中保存的值。当我写“工作”时而不是'?',echo输出正确的值。

所以现在我可以为我搜索的每个信息创建一个函数,但这会以意大利面条代码结束。所以我问你是否有可能使用我上面的搜索查询和正确的输出。我该怎么做?

提前致谢并抱歉我的英文写得不好。

3 个答案:

答案 0 :(得分:-1)

阅读文档:http://php.net/manual/en/mysqli.prepare.php

  

标记仅在SQL语句的某些位置是合法的。对于   例如,它们被允许在INSERT语句的VALUES()列表中   (指定行的列值),或与列进行比较   在WHERE子句中指定比较值。但是,他们不是   在select中允许标识符(例如表名或列名)   用于命名SELECT语句要返回的列的列表,或   指定二元运算符的两个操作数,例如= equal   标志。后一种限制是必要的,因为它会   无法确定参数类型。这是不允许的   将标记与NULL比较?也是NULL。通常,参数是   仅在数据操作语言(DML)语句中合法,而不在   数据定义语言(DDL)语句。

修改您的代码:

$stmt= $mysqli->prepare("SELECT $information FROM pr_hr_searchorders WHERE id = ?");
$stmt->bind_param('i', $soid);

答案 1 :(得分:-2)

将您的代码更改为

public function get_searchorder_single_information($soid, $information) {

        global $mysqli;
        $query = "SELECT".$information." FROM pr_hr_searchorders WHERE id = ?"
        $stmt = $mysqli->prepare($query);
        $stmt->bind_param('si', $soid);
        $stmt->execute();
        $stmt->bind_result($result);
        $stmt->fetch();
        echo $result;

        $stmt->close();

    }

然后您将获得所需的结果

答案 2 :(得分:-4)

尝试这样的事情:

if(!($stmt = $mysqli->prepare("SELECT ? FROM pr_hr_searchorders WHERE id = ?"))){
        echo "Prepare failed: (". $mysqli->errno. ") " . $mysql->error;
    }

并且对于绑定也是:

if(!$stmt->bind_param("si", $information, $soid)){
        echo "Binding parameters failed: (" . $stmt->errno. ") ". $stmt->error;
}

也许这会给你更多信息。