2015-05-03 116 views
1

我無法插入到我的數據庫。我的插入語句之一,因爲當我做一個選擇*從表;我得到新的記錄。然而,我想要插入的其他表沒有任何值,當我從中選擇*。插入到MySQL數據庫不能從PHP工作

,我想插入值2代表的DDL是

CREATE TABLE Job(uid INTEGER,job_id INTEGER AUTO_INCREMENT, 
input varchar(500),status varchar(100),start_time time,finish_time time, 
FOREIGN KEY(uid) REFERENCES User(uid) ON DELETE CASCADE, 
PRIMARY KEY(job_id))ENGINE = InnoDB; 

CREATE TABLE BLAST(database varchar(100),evalue varchar(100),job_id INTEGER, 
FOREIGN KEY (job_id) REFERENCES Job(job_id))ENGINE = InnoDB; 

有問題的表是BLAST表。我相信這是因爲有一個job_id的外鍵,而我實際上並沒有插入該值。我認爲它只是做Job_id作業表中的job_id,但我猜我是錯的。如果有人能向我解釋該怎麼辦,我將不勝感激!

PHP代碼

<select id="database" name="database"> 
    <option selected="selected" disabled="disabled">Database</option> 
    <option value="Archaea">Archaea</option> 
    <option value="Bacteria">Bacteria</option> 
</select> 

<select id="evalue" name="evalue"> 
    <option selected="selected" disabled="disabled"> evalue <option> 
    <option value="0.0001">0.0001</option> 
    <option value="0.001">0.001</option> 
</select> 

<select id="hits" name="hits"> 
    <option selected="selected" disabled="disabled"> Hits</option> 
    <option value="50">50</option> 
    <option value="100">100</option> 
</select> 

<input id="BlastSearch" type="text" name="BlastSearch" value='' /> 
<input type="submit" name="submit" value="submit" /> 
<button type="reset" value="Clear">Clear</button> 
</form> 
<?php 
    session_start(); 
    require_once '../secure/database.php'; 
    $mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname); 
    } 

    //Insert the values into the database 

    if(isset($_POST['submit'])){ 

      //declare variables to what the user defines them as 
      $db = $_POST['database']; 
      $evalue = $_POST['evalue']; 
      $sequence = $_POST['BlastSearch']; 

      //insert the values into the database 
      $mysqli->query("INSERT INTO `Job` (`uid`, `input`, `status`, `start_time`, `finish_time`) VALUES ('1', '" . $sequence . "', 'running' , NOW(), NOW())"); 

      $mysqli->query("INSERT INTO `BLAST`(`database`, `evalue`, `job_id`) VALUES ('" . $db . "','" . $evalue . "', '1')") or die(mysqli_error($db)); 



    } 
    ?> 

錯誤我收到:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的'JOB_ID '正確的語法,databaseevalue)VALUES( '56', '0.001', '真核生物')' 在1號線

+1

任何錯誤信息? – panther

+0

不是我做的PHP的search.php :( – jefferymicheals

+0

我*敢肯定那*第二次查詢將會導致錯誤。因爲你有一個字符串文字作爲列名,然後叫回來,打勾的標識符「1」在 – David

回答

3
if($mysqli->query("INSERT INTO `BLAST`(`database`, `evalue`, `job_id`) VALUES ('" . $db . "','" . $evalue . "', '".$mysqli->insert_id."')")) { 
    echo "Error description: " . mysqli_error($mysqli); 
} 
手冊

1)更改硬編碼的'1'以使用$mysqli->insert_id。你需要插入正由第一個查詢產生適當的作業ID:

參見:http://php.net/manual/en/mysqli.insert-id.php

2)改回蜱在包裝單引號JOB_ID值: 變化:`」。 $ mysqli-> insert_id。「`'」。$ mysqli-> insert_id。「 '。請注意,我們正在將後退打包程序更改爲單引號封裝程序。在正確的可變

3)傳遞給mysqli_error($mysqli)功能。通過在$ mysqli的,而不是$ DB

4)變更job_id包裝在你的插入查詢使用回蜱,而不是單引號。

+0

所以我只是在將硬盤的添加mysqli- $> INSERT_ID後? – jefferymicheals

+0

加上'$ mysqli-> insert_id'編碼爲「1」,你必須在第二個查詢。此外,您還需要更改反勾到你包裹在查詢值撇號。(見上面的例子)。 – McWayWeb

+0

它仍然告訴我空集:( – jefferymicheals