0

我在 php 中编写了一个函数,它根据给定的数组更新 mysql 表。在更新之前,我检查是否已经存在具有相同“描述”值的条目。

// $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'。怎么会这样??

谢谢你的回复,卢卡斯

4

1 回答 1

0

首先检查实际查询和返回结果是什么:

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

我建议你用更简单的查询替换 sql 查询(除非你真的必须这样执行),并用 php 计算出逻辑(true,false):

$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 回答