iT邦幫忙

0

PDO錯誤警告

  • 分享至 

  • xImage

我參考網路上PDO的做法,但在$stmt->execute();會一直出現
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\website\htdocs\google\111\test.php on line 9
的錯誤警告 我該如何修正他

<?
$connection = new PDO('mysql:host=localhost;dbname=444;charset=utf8', '444', '222');
$sql = "select 	member_real_name from member where member_id = :member_id";
$member_id = 29;
$stmt = $connection->prepare($sql);
$stmt->bindParam('i',$member_id);

   /* execute query */
   $stmt->execute();

   /* Store the result (to get properties) */
   $stmt->store_result();

   /* Get the number of rows */
   $num_of_rows = $stmt->num_rows;

   /* Bind the result to variables */
   $stmt->bind_result($member_id);
?>
code iT邦新手 5 級 ‧ 2019-08-26 10:45:35 檢舉
1. 錯誤訊息說的是參數無效,你有測試過這個SQL語法是正確的嗎?
2. $sql實際執行的語法是?
3. mamber_id的格式是?
檢查以上,應該就能發現問題了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
純真的人
iT邦大師 1 級 ‧ 2019-08-26 10:56:38

我猜應該是對應錯誤吧..

$stmt->bindParam('i',$member_id);

應該是..

$stmt->bindParam(':member_id',$member_id);
豬豬人 iT邦新手 4 級 ‧ 2019-08-26 11:08:13 檢舉

謝謝大大,改寫後就正確了。
想請問我把sql改成用"?",我要怎麼改寫才會正確

$sql = "select 	member_real_name from member where member_id = ?";

你可以參考?的說明唷
http://lucaswei.blogspot.com/2012/08/sql.html

0
小魚
iT邦大師 1 級 ‧ 2019-08-26 11:00:13
$statement->bindParam(":member_id",$member_id, PDO::PARAM_INT);

不過如果有做過數字驗證,
基本上我數字是不會用參數的,
我加參數主要是防SQL Injection而已,
純數字不會造成SQL Injection.

豬豬人 iT邦新手 4 級 ‧ 2019-08-26 11:11:19 檢舉

想請問為何純數字不會SQL Injection
不是$sn=11;改寫成sn='11 or 1'就被注入了嗎?
剛學PDO,麻煩大大講解一下

小魚 iT邦大師 1 級 ‧ 2019-08-26 12:22:59 檢舉

那就不是純數字了啊...

0
chingv_v
iT邦新手 5 級 ‧ 2019-08-26 11:02:43

這個是錯誤是指parameter還未定義...
$sql中你使用了:member_id
所以應該是$stmt->bindParam(':member_id',$member_id);
而並非i

我要發表回答

立即登入回答