插入到mysql数据库无法使用php

时间:2015-05-03 17:36:47

标签: php mysql insert

我无法插入数据库。我的一个插入语句有效,因为当我从表中执行Select *时;我得到了新的记录。但是,当我从中选择*时,我想要插入的另一个表没有任何值。

我希望插入值的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表中的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服务器版本相对应的手册,以便在&#39;&lt;&#39; job_id&#39;,databaseevalue)值附近使用正确的语法(&#39; 56&# 39;,&#39; 0.001&#39;,&#39; Eukaryota&#39;)&#39;在第1行

1 个答案:

答案 0 :(得分:3)

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

1)更改硬编码&#39; 1&#39;使用$mysqli->insert_id。您需要插入第一个查询生成的正确job_id:

请参阅:http://php.net/manual/en/mysqli.insert-id.php

2)将回滚标记更改为 job_id 值包装中的单引号: 更改:`&#34;。$ mysqli-&gt; insert_id。&#34;`&#39; &#34; $ mysqli-&GT; INSERT_ID&#34。 &#39; 即可。请注意,我们正在将后面的ticks包装器更改为单引号包装器。

3)将正确的变量传递给mysqli_error($mysqli)函数。传递 $ mysqli 而不是 $ db

4)更改插入查询中的job_id包装器以使用返回刻度,而不是单引号。