在MySQL行中检查值是否存在

5

我有一个php变量:$foo

我的MySQL表名为data,其结构如下:

id    var    header

1     zj3     http://google.com

我想检查变量$foo是否已经存在于var行中。
如果是,则希望输出header("http://google.com")
您会如何处理这个问题?
提前感谢,如果需要任何澄清,请问我!

所以,如果表中没有某个值,您想返回一行?我有点困惑。 - gen_Eric
@Rocket 抱歉打错了一个巨大的错字!!我已经编辑了我的问题。 - Trufa
6个回答

9

您应该查询:

SELECT `header` FROM `data` WHERE `var` = '$foo'

这将返回所有具有$foo值的var头。

$db = mysqli_connect('localhost', 'username', 'password', 'database');
if($query = mysqli_query($db, "SELECT `header` FROM `data` WHERE `var` = '$foo'")){
  while($row = mysqli_fetch_assoc($query)){
    echo $row['header'];
  }
  mysqli_free_result($query);
}

1
在第一行的 { 前面再加一个 ) - Andrew
@Rocket - 现在真想拥抱你 ;) 开玩笑的,感谢你的帮助,对我的无知表示歉意!!再次感谢你的努力! - Trufa
@crh225:实际上不是。我没有将$querymysqli_query进行比较。我将$query设置为mysqli_query,并检查分配(= )的结果。如果mysqli_query返回FALSE,则if()不会运行,否则它会运行。 - gen_Eric
好的,我不知道为什么你们认为这是正确的,但我告诉你们,不仅那是错误的,而且那是一个危险的答案... - Vulkan
@user3737190:唯一的危险是缺少转义。这个回答已经四年了,所以非常过时。当前的解决方案是使用预处理语句。 - gen_Eric
显示剩余15条评论

1

首先连接到数据库

$query = mysql_query("SELECT var, header FROM data WHERE id='1'") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
    if($foo == $row['var']){
        echo $row['header'];
    }
}

编辑:根据您的编辑更改了等式语句


它说:“没有选择数据库”,这可能是为什么? - Trufa
@Trufa:你需要确保首先使用 mysql_connect 连接到数据库。 - gen_Eric

1

你是在询问$foo是否与data中的任何字段匹配,还是在询问$foo=some_field?如果你想要$foo==var,请使用这里的代码。

$foo='somevalue';
$query="SELECT id, var, header FROM `data` WHERE var='$foo'";
$result=mysqli_query($query);
if($result->num_rows==0) 
  $loc= 'http://google.com';//default value for when there is no row that matches $foo
}else{
  $row=$result->fetch_assoc(); //more than one row is useless since the first header('Location: x') command sends the browser to a new page and away from your script.
  $loc=$row['header'];

}
header ("Location: $loc);
exit;

ETA:由于您编辑了问题,看起来您希望在搜索值与变量列匹配时回显标题列。以上方法对此无效。

是的,这是正确的,如果您的搜索值与您的变量列匹配,我想要回显标题列。 - Trufa

1

这并不难,如果我理解正确的话,这应该能帮到你。

// Query Variable / Contains you database query information
$results = $query;

// Loop through like so if the results are returned as an array
foreach($results as $result)
{
    if(!$result['var'])
        echo $result['header'];
}

// Loop through like so if the results are returned as an object
foreach($results as $result)
{
    if(!$result->var)
        echo $result->header;
}

0

你只是想知道 $var 的值是否在该列中的任何行中出现过吗?

SELECT COUNT(id) FROM data WHERE var = ?;

结果将是包含变量 $var 值的行数。


0

这是一个针对所有“它是否存在”的问题的模板。

这是目前为止唯一对我实际有效且未过时的方法。

if ($query = mysqli_query($link, "SELECT header FROM data WHERE var = '$foo'")) {

        $header = mysqli_fetch_assoc($query);

        if ($header) {

            // The variable with value $foo exists.
        }
        else {

            // The variable with value $foo doesn't exist.
        }
    }
    else {

        // The query didn't execute for some reason. (Dammit Obama!)
    }

警告!

即使变量不存在$querymysqli_query()之间的比较将始终返回TRUE

唯一的方式——就像我遇到的那样——比较返回FALSE是因为查询中存在语法错误。

我不知道为什么被接受的答案的作者能够成功,也许是更新了,或者他有语法错误,但非常自信,没有检查它是否可能是TRUE

这是某人对他的语法进行更正的评论:

"在第一行的{前添加另一个)

因此,被接受的答案是错误的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接