首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql预准备语句,这是可能的吗?

mysql预准备语句,这是可能的吗?
EN

Stack Overflow用户
提问于 2010-12-19 01:56:04
回答 2查看 167关注 0票数 0
代码语言:javascript
复制
function fetchbyId($tableName,$idName,$id){
        global $connection;
        $stmt = mysqli_prepare($connection, 'SELECT * FROM ? WHERE ? = ?'); 
        var_dump($stmt);
        mysqli_stmt_bind_param($stmt,'s',$tableName);
        mysqli_stmt_bind_param($stmt,'s',$idName);
        mysqli_stmt_bind_param($stmt,'i',$id);
        $stmt = mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($name,$id);
        $fetchArray = array();
        while($row = mysqli_stmt_fetch($stmt)){
            $fetchArray[] = $row;
        }
        return $fetchArray;
    }

我是否可以使用表名的占位符,或者这只适用于表列?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-19 02:02:55

不,它只接受值(即:不接受列、表名、模式名和保留字),因为它们将被转义。不过,您可以这样做:

代码语言:javascript
复制
$sql = sprintf('SELECT * FROM %s WHERE %s = ?', $tableName, $idName);
$stmt = mysqli_prepare($connection, $sql); 
mysqli_stmt_bind_param($stmt,'i',$id);
票数 1
EN

Stack Overflow用户

发布于 2010-12-19 02:01:45

不,你不能。表名和列名是语法,值是数据。语法不能参数化。

表/列名称可以安全地直接插入到字符串中,因为它们来自一组经过验证的、有限的有效表/列名称(对吗?)。只有用户提供的值才应该是参数。

代码语言:javascript
复制
function fetchbyId($tableName,$idName,$id){
    global $connection;
    $stmt = mysqli_prepare($connection, "SELECT * FROM $tableName WHERE $idName = ?"); 
    mysqli_stmt_bind_param($stmt,'i',$id);
    $stmt = mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($name,$id);
    $fetchArray = array();
    while($row = mysqli_stmt_fetch($stmt)){
        $fetchArray[] = $row;
    }
    return $fetchArray;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4479287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档