我无法插入数据库。我的一个插入语句有效,因为当我从表中执行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;,database
,evalue
)值附近使用正确的语法(&#39; 56&# 39;,&#39; 0.001&#39;,&#39; Eukaryota&#39;)&#39;在第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
包装器以使用返回刻度,而不是单引号。