2013-02-16 40 views
0

我試圖用一些特殊字符(如撇號)將一些名稱插入到使用php的mysql數據庫中。例如:在php中插入帶有特殊字符的名字在mysql中

INSERT INTO PLAYERS VALUES('{$players[$n][1]}','$nom_team'); 

其中$players是包含名稱作爲N'ZogbiaN'Diaye等的陣列。然而,這將導致一個錯誤。

我已經使用和addslashes功能的嘗試:

$players[$n][1] = addslashes($players[$n][1]); 

,但這不能正常工作。數據庫中保存的是N\'Zogbia,有時候還有N\\\\\\\\\\'Diaye

我已經用盡想法解決問題。我希望你們能幫助我。

+0

想法是,如果您使用'addslashes()'來轉義MySQL的值,那麼在某些時候讀取值時,您會使用'stripslashes()'。 – 2013-02-16 16:44:09

+0

你最有可能啓用'magic_quotes'。 – Kermit 2013-02-16 16:46:44

+0

你還應該看看使用準備好的語句和佔位符,這樣就可以避免完全使用'addslashes'和'stripslashes'。 – andrewsi 2013-02-16 16:47:05

回答

0

有2個可能的情況

  1. 你有魔術引號上。 Turn them off.
  2. 某種消毒它們全部函數在所有輸入數據上運行。擺脫它。
+0

它不工作,由於任何原因腳本在名稱中包含多個斜槓,所以當我從mysql stripslash中取回數據時,只需刪除一個斜槓,以便其他人仍然存在... – user2078757 2013-02-16 19:41:41

-1

您可以使用預處理語句。

<?php 
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$city = "N'Zogbia"; 

/* create a prepared statement */ 
if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) { 

    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "s", $city); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

    /* bind result variables */ 
    mysqli_stmt_bind_result($stmt, $district); 

    /* fetch value */ 
    mysqli_stmt_fetch($stmt); 

    printf("%s is in district %s\n", $city, $district); 

    /* close statement */ 
    mysqli_stmt_close($stmt); 
} 

/* close connection */ 
mysqli_close($link); 
?>