既上一個問題
我用foreach跑出來的
$keyName = ['a','b','c'];
foreach($keyName AS $_key){
echo '$'."$_key" ."=$_POST[$_key]".'' ;}
//結果:$a=$_POST['a'],$b=$_POST['b'],$c=$_POST['c']
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";
跟我直接宣告
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";
有什麼差別嗎,我直接宣告的話values是抓的到值的,但我用foreach跑出來的,values卻抓不到值
<!--結果-->
insert into english (a,b,c) values ('','','')//這是foreach的
insert into english (a,b,c) values ('aa','bb','cc')//這是直接宣告的
不是「foreach」和「直接宣告」的差別
是你在 foreach 裡寫的就只是echo
(把文字顯示
出來)
所以沒有去「執行」那段程式碼
你要做的大概是這個
雖然在上一題中跟你解釋了魔術引數。
但你似乎誤會了什麼。
雙引號可以協助將組合變數的值為一個「字串」
但並不代表著值有轉變出來。
認真來說,魔術引數只是幫你組合字串。
而不會做執行動作。
就正規來說。你並沒宣告 $a $b $c
變數就不會存在。
如果你有打開錯誤警告。
理論上你會獲得變數未宣告的警告才對。
其實你要的是這樣吧?
$keyName = ['a', 'b', 'c'];
foreach ($keyName as $_key) {
$$_key = $_POST[$_key] ?? '[某預設值]';
}
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";
echo $sql;
PS. 現在 SQL 比較不推薦用字串連接,而是用 prepare 來代參數,會安全很多。