0

我必须使用对另一个表(FK)中记录的引用。另一个表中的记录可能存在也可能不存在,所以我可以使用它的 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');");

现在一切正常。

4

1 回答 1

1

试试这个,你应该在列名周围使用反引号而不是引号。

$rez = mysqli_query($con, "INSERT INTO `db_site`.`levels` ( `levelstring`) 
                           VALUES ('$level') ");
于 2013-06-28T18:15:54.840 回答