php
  • mysql
  • sql
  • syntax
  • insert
  • 2012-12-26 47 views 0 likes 
    0

    這裏是mysql插入我在php中運行。我已經刪除了發生錯誤的部分,但是接下來的部分會出現錯誤。我沒有看到什麼是不同的導致錯誤。我在我的php頁面上有一個SQL語法錯誤

    $fields="adv_exchange SET synum='".$synum."', worknum='".$_POST['worknum']."', user_id='".$current_user->ID."', f_name='".$current_user->user_firstname."', l_name='".$current_user->user_lastname."', email='".$current_user->user_email."', regnum=".$_POST['regnum'].", item='".$item."', qsver='".$_POST['qsver']."', flashrom='".$_POST['flashrom']."',expansion='".$_POST['board']."', rdisplay='". $_POST['rdisplay']."', screen_model='".$_POST['screen_model']."', p_hardware='".$_POST['cable']."', pcolor='".$_POST['pcolor']."', pname='".$_POST['pname']."', kboard='".$_POST['kboard']."', ip='".$_POST['ip']."', reg_name='".$_POST['reg_name']."', mem=".$_POST['mem'].", dt_server='".$_POST['dt_server']."', alert='".$_POST['alert']."', ows='".$_POST['ows']."', w_date='".$_POST['w_date']."', flashromver='".$_POST['flashromver']."', s_size='".$_POST['s_size']."', mag='".$_POST['mag']."', rcard='".$_POST['rcard']."', kvsid=".$_POST['kvsid'].", finger='".$_POST['finger']."', stand_alone='".$_POST['stand_alone']."', standards='".$_POST['standards']."', profile='".$_POST['profile']."', man_date='".$_POST['man_date']."', l_sn='".$_POST['l_sn']."', misc='".$_POST['misc']."', problem='".$_POST['problem']."'"; 
    

    then $ query =「insert into $ fields」;

    我收到回

    您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'item ='JS900CV',qsver ='',flashrom ='',expansion ='',rdisplay ='',screen_model =''附近使用正確的語法1 大段引用

    如果我呼應$查詢我得到這個:

    插入到adv_exchange SET synum = 'SY5135',worknum = '123456',USER_ID = '2',f_name =」 REMOVED',l_name ='REMOVED',email ='REMOVED',regnum =,item ='JS900CV',qsver ='',flashrom ='',expansion ='',rdisplay ='',screen_model ='',p_hardware ='',pcolor ='',pname ='',kboard ='',ip ='192.168.1.16',reg_name ='',mem =,dt_server ='',alert ='',ows ='', w_date ='',flashromver ='',s_size ='', mag ='',rcard ='',kvsid = 3,finger ='',stand_alone ='',standards ='',profile ='',man_date ='',l_sn ='',misc ='misc test \ r \ n',問題='gen test'

    根據我在錯誤中輸入的內容改變我的聲明中的位置。並非所有字段都使用表單是動態的提供數據,所以這些字段取決於選擇的選項。在關注使用$_POST直接插入到mysql的情況下,我會首先清理數組。任何幫助將不勝感激。

    回答

    3

    您對MySQL數據庫使用非常非常糟糕的方法:手動創建查詢。您應該真正使用準備好的語句:此問題也將得到解決。

    請勿使用mysql_*功能,請改用PDO

    您的代碼看起來像這樣(簡化):

    // This holds the query 
    $statement = $pdo->prepare('INSERT INTO adv_exchange SET synum=?, worknum=?, etc=?, problem=?'); 
    
    // This executes it with the given arguments. It's 100% injection-proof and safe. In fact, it's also faster. 
    $statement->execute(array($synum, $_POST['worknum'], $_POST['therest'], $_POST['problem'])); 
    
    +0

    好的謝謝,看起來更容易安裝和維護。更安全的是獎金也感謝你的幫助。 –

    +0

    這種方法會繞過發送導致我的問題的空字段嗎?還是我仍然只需要發送正在用於該提交的字段? –

    +0

    這種方法會根據POST數據自動插入空字符串,零或NULL值。無需計算缺少的字段。 –

    4

    看看regnum=,。您不提供regnum的值。要麼將其全部保留,要麼將其設置爲適當的值。

    +0

    那麼因爲regnum中沒有數據會給出錯誤?所以我需要建立沒有空字段的插入語句呢? –

    +0

    @new_to_this是的,要麼忽略字段要麼提供值。 –

    0

    REGNUM = 「$ _ POST [ 'REGNUM'。」正在造成這個問題。當它未定義時,您會在SQL查詢中得到regnum =,

    更大的問題是您沒有逃避您的輸入。要麼在它們周圍使用mysql_real_escape_string,要麼使用預準備語句。

    +0

    我有一個函數,我的查詢之前運行$ _POST數組:運行mysql_real_escape_string,條紋出jave,html和樣式標籤。 –

    0

    您需要SET regnum = SOMETHING。

    目前爲空。

    相關問題