PHP数据库检查不工作


PHP Database check doesn't work

我有点奇怪的问题。我试图检查某个值是否存在通过一个自创建的函数在数据库中,像这样

function is_in_db($val,$row,$db){
    $query = mysql_query("SELECT ".$row." FROM ".$db." WHERE ".$row." = '".$val."'");
    if(mysql_num_rows($query)){
        return true;
    }else{
        return false;
    }
}

据我所知,这是有效的(我在函数外检查了它并回显了结果)。它在那里工作得很好。但是当我这样做时,它一直显示'yes'(它应该显示'no')

    if(is_in_db($_aGET,"c_link","fe_content")){
        echo("yes");
    }else{
        echo("no");
    }

所有的变量工作和正确,我检查了!

有谁知道我在这里做错了什么吗?
编辑:

这里是一些额外的信息。我的数据库看起来像这样(简化):

Database: fe_content
+--------+--------+
| c_link | c_page |
+--------+--------+
|  one   | page 1 |
|  two   | page 2 |
| three  | page 3 |
+-----------------+

我有以下url www.domain.com/page/two

在page.php中,我有以下(仅相关)代码:

if(!empty($_SERVER['PATH_INFO'])){
    $_aGET = substr($_SERVER['PATH_INFO'], 1);
    $_aGET = explode('/', $_aGET);
}
function is_in_table ($val, $col, $table) {
    return (mysql_num_rows(mysql_query("SELECT `$col` FROM `$table` WHERE `$col` = '$val' LIMIT 1")) > 0);
}
if(empty($_aGET[0])){
    echo("Were on page.php");
}else{
    if(is_in_table($_aGET,"c_link","fe_content")){
        echo("yes");
    }else{
        echo("no");
    }
}

这是行不通的。


解决!

哈! !

我现在看到我使用$_aGET而不是$_aGET[0]啊!

对不起,感谢所有的帮助!!!!!!

在不了解更多数据库和变量的情况下回答你的问题有点困难,但我会试一试。

// A made up table called 'users'
+-------+---------+
| id    | name    |
+-------+---------+
| 1     | Bob     |
+-------+---------+
| 2     | John    |
+-------+---------+
// And here's your function
function rowExists($value, $field, $table){
    $sanitized = is_numeric($value) ? $value : "'" . $value . "'";
    $query = mysql_query("SELECT " . $field . " FROM " . $table . " WHERE " . $field . " = " . $sanitized);
    // Credit: @Omeid Herat
    return (boolean) mysql_num_rows($query);
}
// Some usage examples
rowExists('Bob', 'name', 'users'); // true
rowExists('Dave', 'name', 'users'); // false

这个应该可以工作,但是对于SQL注入来说,它绝对是不安全的。

更新
$page = explode('/', $_SERVER['REQUEST_URI']);
if(empty($page[1])){
    echo "Were on page.php";
}else{
    if(is_in_table($page[1], "c_link", "fe_content")){
        echo "yes";
    }else{
        echo "no";
    }
}

虽然我实际上看不出这段代码有任何机械问题,但请使用下面的函数版本,如果您

把你的函数改成:

function is_in_table ($val, $col, $table) {
  return (mysql_num_rows(mysql_query("SELECT `$col` FROM `$table` WHERE `$col` = '$val' LIMIT 1")) > 0);
}

…然后从这里开始。