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() を呼び出したところ、次のように返されました。だから私はこれを変更しました:

$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 に答える