2015-05-03 72 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