PHP数据库检查不起作用

时间:2011-08-21 12:13:22

标签: php mysql

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

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;
    }
}

据我所知这是有效的(我在功能之外检查了它并回应了结果。它在那里工作正常。但是当我这样做时,它会不断显示'是'(它应该显示'否') )

    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 |
+-----------------+

我有以下网址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]啊!

抱歉,感谢您的帮助!!!!!!

2 个答案:

答案 0 :(得分:0)

虽然我实际上看不到此代码的任何机械问题,但请使用下面函数的版本,如果yu

将您的功能更改为:

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

......我们将从那里开始。

答案 1 :(得分: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";
    }
}