簡體   English   中英

沒有bind_param的mysqli准備語句

[英]mysqli prepared statement without bind_param

我有這個代碼,用於從用戶表的最新記錄中選擇fname

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$sdt=$mysqli->('SELECT fname FROM user ORDER BY id DESC LIMIT 1');
$sdt->bind_result($code);
$sdt->fetch();
echo $code ;

我之前使用了帶有bind_param准備語句,但是現在在上面的代碼中我第一次想使用沒有綁定參數的bind_param()准備語句,我不知道如何在不使用bind_param()情況下從表中進行選擇。 怎么做?

如果你想在沒有綁定的情況下執行它,只需使用query

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$res = $mysqli->query('SELECT fname FROM user ORDER BY id DESC LIMIT 1');
echo current($res->fetch_row());

勾選的答案對 SQL 注入開放。 使用准備好的語句而不正確准備數據有什么意義。 您永遠不應該只在查詢行中放置一個字符串。 准備好的語句的要點是它是准備好的。 這是一個例子

$query = "SELECT `Customer_ID`,`CompanyName` FROM `customers` WHERE `Customer_ID`=?";
$stmt = $db->prepare($query);
$stmt->bind_param('i',$_POST['ID']);
$stmt->execute();
$stmt->bind_result($id,$CompanyName);

在 Raffi 的代碼中,你應該這樣做

$bla = $_POST['something'];
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$stmt = $mysqli->prepare("SELECT `fname` FROM `user` WHERE `bla` = ? ORDER BY `id` DESC LIMIT 1");
$stmt->bind_param('s',$_POST['something']);
$stmt->execute();
$stmt->bind_result($code);
$stmt->fetch();
echo $code;

請注意,我不知道您的帖子數據是字符串還是整數。 如果它是一個整數,你會放

$stmt->bind_param('i',$_POST['something']);

反而。 我知道你說的是沒有綁定參數,但相信我,如果你從頁面接收輸入,而不是首先正確准備它,那真的很糟糕。

實際上,如果我更正你的腳本,它會是這樣的:

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$sdt = $mysqli->prepare('SELECT fname FROM user ORDER BY id DESC LIMIT 1');
$sdt->execute();
$sdt->bind_result($code);
$sdt->fetch();
echo $code;

所以,如果沒有 bind_param,通常這對我有用:

$bla = $_POST['something'];
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$stmt = $mysqli->prepare("SELECT fname FROM user WHERE bla = " . $bla . " ORDER BY id DESC LIMIT 1");
$stmt->execute();
$stmt->bind_result($code);
$stmt->fetch();
echo $code;

那可能會有所幫助。

暫無
暫無

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

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