0

特定の配列に従ってmysqlテーブルを更新する関数をphpで作成しました。更新する前に、同じ「説明」値を持つエントリが既に存在するかどうかを確認します。

// $fachtyp is given by foreach
$query = "SELECT IF(EXISTS(SELECT 1 FROM fachtyp WHERE `Description`='$fachtyp'),'true','false')"
    . " AS existance";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_assoc($result);
$exists = ($row['existance'] === 'true');
if (!$exists) { /* update */ }

問題は次のとおりです。これをデバッグすると、デバッグ中に $row['exists'] が netbeans で 'false' を返すことを認識しました。これはどうして起こるのでしょうか??

Thx fer reply、ルーカス

4

1 に答える 1

0

最初に、実際にクエリと返された結果が何であるかを確認します。

echo $query; // debug query
var_dump($row); // see what is returned

SQLクエリを(実際にそのように実行する必要がない限り)より単純なクエリに置き換え、ロジック(true、false)をphpで解決することをお勧めします。

$query = "SELECT 1 FROM fachtyp WHERE `Description`='$fachtyp'";
$result = mysqli_query($con, $query);
$exists = (bool) mysqli_num_rows($result); // just count returned rows is enough to determine if value exists in database
if (!$exists) { /* update */ }

また、$fachtyp値がリクエストから来ている場合 (GET または POST 値、実際にはリクエストから来ていなくても)、mysqli_real_escape_string()クエリに入れる前に値をサニタイズするために使用する必要があります。

于 2013-09-12T18:56:25.400 に答える