亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 php 將數組作為鍵 => 具有字符串值的值插入到 sql

如何使用 php 將數組作為鍵 => 具有字符串值的值插入到 sql

PHP
牧羊人nacy 2023-05-26 15:59:21
foreach($_SESSION['s'] as $key=>$value){  $name[]="'".$value."'";}$name=implode(",",$name);$conn= mysqli_connect("localhost","root","","slashbill");for($x=0;$x<=3;$x++){  $sql = "INSERT INTO slashbill (member,give,receive,paid) VALUES    ($name,'".$give[$x]."','".$receive[$x]."','".$paid1[$x]."')";  $exe=mysqli_query($conn,$sql); }我對名稱數組只有一個小問題,當我執行上面的代碼時,每一行的成員值都取值我得到了什么member-----name1,name2,name3,name4name1,name2,name3,name4name1,name2,name3,name4name1,name2,name3,name4我想要的是這個member-----name1name2name3name4注意:所有其他列都已完美插入,稍后我會考慮 SQL 注入安全性。
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

我認為你只需要保留$name一個數組,不要將它分解回一個字符串,然后循環遍歷它。我不知道里面$give和其他人是什么。我看到它們是數組,但我不明白它們與$name. 下面的代碼執行此操作并插入 16 條記錄(假設有 4 個名稱):


// Store names in an array

$names = [];

foreach ($_SESSION['s'] as $key => $value) {

    $names[] = $value;

}


$conn = mysqli_connect("localhost", "root", "", "slashbill");

$sql = 'INSERT INTO slashbill (member,give,receive,paid) VALUES (?,?,?,?)';


// Loop over names

foreach ($names as $name) {

    for ($x = 0; $x <= 3; $x++) {

        $stmt = $conn->prepare($sql);

        if (!$stmt) {

            die('Could not prepare statement');

        }

        if (!$stmt->bind_param('ssss', $name, $give[$x], $receive[$x], $paid1[$x])) {

            die('Could not bind statement');

        }

        if (!$stmt->execute()) {

            die('Could not execute statement');

        }

    }

}

但是,如果會話數據和您的其他變量之間存在某種神奇的關系,并且您真的只想插入 4 行,那么$x可以使用仍然跟蹤的這個版本。


// Store names in an array

$names = [];

foreach ($_SESSION['s'] as $key => $value) {

    $names[] = $value;

}


$conn = mysqli_connect("localhost", "root", "", "slashbill");

$sql = 'INSERT INTO slashbill (member,give,receive,paid) VALUES (?,?,?,?)';


// Loop over names

for ($x = 0; $x <= count($names); $x++) {

    $stmt = $conn->prepare($sql);

    if (!$stmt) {

        die('Could not prepare statement');

    }

    if (!$stmt->bind_param('ssss', $names[$x], $give[$x], $receive[$x], $paid1[$x])) {

        die('Could not bind statement');

    }

    if (!$stmt->execute()) {

        die('Could not execute statement');

    }

}

我知道你說過你會擔心稍后會轉義它,但我只是將它切換為準備好的語句,因為它更容易為每個人準備。


查看完整回答
反對 回復 2023-05-26
  • 1 回答
  • 0 關注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號