簡體   English   中英

mysql編寫語句,這可能嗎?

[英]mysql prepared statements, is this possible?

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;
    }

我可以使用表名稱的占位符,還是只能用於表格列?

不,你不能。 表名和列名是語法,值是數據。 語法不能參數化。

表/列名可以安全地直接插入到字符串中,因為它們來自經過驗證的有限有效表/列名集( 對嗎? )。 只有用戶提供的值應該是參數。

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;
}

不,它只接受值(即:不是列,表名,模式名稱和保留字),因為它們將被轉義。 你可以這樣做:

$sql = sprintf('SELECT * FROM %s WHERE %s = ?', $tableName, $idName);
$stmt = mysqli_prepare($connection, $sql); 
mysqli_stmt_bind_param($stmt,'i',$id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM