簡體   English   中英

PHP錯誤:數組到字符串的轉換

[英]PHP error : Array to string conversion

我有一個用HTML代碼集命名的PHP文件,此代碼用於顯示要為下一個過程選擇的多個位置ID(窗體為GET)。

$sqloc = mysql_query("SELECT loc_id FROM location");
while ($row = mysql_fetch_array($sqloc)){

echo "<tr><td>
    <label><input type=\"checkbox\" name=\"chk_loc[]\" value=". $row['loc_id'] ." />
</td><td>" . $row['loc_id'] . "</td></tr></label>"; }

然后在其他PHP文件中,我使用此代碼使用之前的復選框根據所選ID選擇數據。

$cbarray = array();
if (isset($_GET['submit_location'])) {
  $cbarray = $_GET['chk_loc']; }

for ($i=0; $i<count($cbarray); $i++) {
  $sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
      while($ccb= mysql_fetch_row($sqlcb)) {
                print_r($ccb); }
}

但是當我運行它時,它會出現通知:

第62行上....的數組到字符串的轉換

在($ sqlcb = mysql_query)部分的第62行上。 我已經使用var_dump來檢查數組,並且它像這樣打印數組:

array(4) { [0]=> string(5) "LO001" [1]=> string(5) "LO003" [2]=> string(5) "LO004" [3]=> string(5) "LO005" } 

反正有解決這個問題的方法嗎? 謝謝。

php中的Checkbox作為數組處理。 在此代碼中,標識為chk_loc的復選框作為數組存儲在$ cbarray中。 $sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'"); 在這段代碼中,where子句接受一個字符串,並且您正在提供一個數組。

並使用PDO防止SQL注入PDO PHP

問題是因為這樣的說法,

$sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
                                                                 ^ see here

$cbarray實際上是一個數組,而不是字符串。 您可以使用var_dump($cbarray);來查看其結構var_dump($cbarray);

因此解決方案是:

使用implode()函數將字符串與數組元素連接起來,並在查詢中使用它,如下所示:

$cbarray = array();
if (isset($_GET['submit_location'])) {
    $cbarray = $_GET['chk_loc'];

    $query = "SELECT * FROM location WHERE loc_id IN ('" . implode("','", array_map('mysql_real_escape_string', $cbarray)) . "')";
    $sqlcb = mysql_query($query);
    while($ccb= mysql_fetch_row($sqlcb)) {
        print_r($ccb); 
    }
}

旁注:不要使用mysql_*函數,從PHP 5.5開始不推薦使用它們,並在PHP 7.0中將其完全刪除。 改用mysqlipdo 這就是為什么您不應該使用mysql_*函數的原因

暫無
暫無

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

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