我必须使用对另一个表(FK)中的记录的引用。另一个表中的记录可能存在或不存在,因此我可以使用其ID或插入新ID,然后使用其ID。
我有以下代码:
$con=mysqli_connect("localhost","root","test","db_site");
// get existing levels
$levelIdSQL = "SELECT idlevel from levels where levelstring = $level";
$levels = mysqli_query($con, $levelIdSQL);
$levelID = -1;
if ($levels['num_rows'] > 0) {
echo "<br><br>some results<br><br>";
// we already have a level, use its id when updating
$row = $levels->fetch_assoc();
$levelID = $row['idlevel'];
} else {
// we must insert this string in the levels table, then use its id
echo "<br>running query: " . "INSERT INTO `db_site`.`levels` ('levelstring') values ('$level');";
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else {
echo "<br><br>connected OK<br><br>";
}
$rez = mysqli_query($con, "INSERT INTO `db_site`.`levels` ('levelstring') values ('$level');");
$levelID = mysqli_insert_id($con);
}
echo "<br><br>LEVEL ID: " . $levelID;
我的级别表有一个autoinc“idlevel”字段,并且使用MySQL Workbench /命令行界面运行相同的SQL会很好地插入记录。但是, mysqli_insert_id 返回0并且未插入任何记录。
我做错了什么?
编辑:在jterry的建议之后,我调用了die()并返回:“你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,以便在''levelstring'附近使用正确的语法) ”。所以我改变了这个:
$rez = mysqli_query($con, "INSERT INTO `db_site`.`levels` ('levelstring') values ('$level');");
进入这个:
$rez = mysqli_query($con, "INSERT INTO `db_site`.`levels` (levelstring) values ('$level');");
现在一切都好。
答案 0 :(得分:1)
试试这个,你应该在列名称周围使用反引号而不是引号。
$rez = mysqli_query($con, "INSERT INTO `db_site`.`levels` ( `levelstring`)
VALUES ('$level') ");