[英]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.