簡體   English   中英

如何使用mysqli_real_escape_string()在MySQL DB中插入序列化數組

[英]How to insert serialized array in MySQL DB using mysqli_real_escape_string()

我已經嘗試了mysqli_real_escape_string()無窮變體,以在表之一的列中插入一個簡單數組。 列的內容每次都是空白。

有人能看到這個查詢有什么問題嗎?

$accessRights = array(
  'S-01' => 'Y',
  'S-02' => 'Y',
);
$accessRights = serialize( $accessRights );

mysqli_query( $GLOBALS['db_link'], 'SET NAMES "utf8"' ); // to ensure proper encoding of special characters
$query_string = '
  UPDATE users_accessRights
  SET
    accessRights = "' . mysqli_real_escape_string( $accessRights ) . '"
  WHERE userID = "' . $_POST['userID'] . '"
  LIMIT 1
';
mysqli_query( $GLOBALS['db_link'], $query_string ) or die( mysqli_error( $GLOBALS['db_link'] ) );

注意:我可以使用此查詢在表中插入一個簡單的文本字符串,因此我知道查詢本身可以工作。

在我看來,您沒有啟用足夠的錯誤報告來發現代碼中的語法錯誤。 mysqli_real_escape_string()需要兩個參數,而不是一個。 您應該確保開發環境的php.ini中設置了以下條目

error_reporting = E_ALL
display_errors = On

或者,將其放在腳本的頂部,但將其刪除以進行生產

ini_set('display_errors', 'On');
error_reporting(E_ALL);

使用變量/用戶輸入創建查詢的更好方法是准備語句 例如

// set mysqli to throw exceptions so you don't have to check return
// values for false or use "or die"
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = $GLOBALS['db_link']; // I suggest you avoid using globals like this ASAP

$mysqli->set_charset('utf8');

$stmt = $mysqli->prepare(
    'UPDATE users_accessRights SET accessRights = ? WHERE userID = ? LIMIT 1');
$stmt->bind_param('si', $accessRights, $_POST['userID']);
$stmt->execute();

假定userID是一個整數字段。

暫無
暫無

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

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