0

我已经在该网站上搜索了答案,但找不到任何有效解决我的具体问题的答案。我有两个文件,第一个当然是我的 index.php,第二个是我的 functions.php 文件,其中显然包含函数,我做了这个函数:

函数 sql_get($lang, $tabler, $rower){

if ($lang == "heb") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0",
        mysql_real_escape_string($tabler));
    $row = mysql_fetch_array($result);
    return $row['$rower'];
}

else if ($lang == "rus") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0",
        mysql_real_escape_string($tabler));
    $row = mysql_fetch_array($result);
    return $row['$rower'];
}

此代码应该获取有关语言的信息(从获取,它得到它,这一切都很好),sql 表和该表中 id 为 0 的特定行。

并从插入的行返回信息。

当语言为“heb”时我的警告和错误:

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 16

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 17

当语言是“rus”时:

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 23

警告:mysql_fetch_array() 期望参数 1 是资源,在第 24 行的 /home/elenbyin/public_html/elenby.co.il/vadim/functions.php 中给出 null

index.php 文件中的函数调用如下所示:

我会感谢那些愿意帮助我的人,尤其是那些愿意帮助我的人。

多谢!

4

2 回答 2

0

首先,您还没有连接到函数内部的数据库。如果您在某个地方打开了数据库,那么您可以使用 来解决这个问题mysql,但您不应该这样做。

其次,您将变量作为第二个参数传递给mysql_query(),但mysql_query()希望查询作为第一个参数完成,第二个参数应该是连接到数据库的连接资源,而您没有。

从查询的结构来看,您似乎打算使用sprintf()它来创建它。

这应该为您创建查询,假设您已经打开了一个数据库连接:

$query = sprintf("SELECT * FROM %s WHERE id = 0",
    mysql_real_escape_string($tabler)); 
$result = mysql_query($query) or die(mysql_error());

注意:mysql已弃用。你不应该使用它。使用mysqliPDO代替。如果您使用mysqli.

于 2013-09-22T18:24:30.293 回答
0

正如 Amal 建议的那样 - 最好不要使用 mysql_* 函数,因为它们不仅被弃用,而且容易受到 sql-injection 的影响。

也就是说,为了修复您的代码,您应该执行以下操作:

$table = mysql_real_escape_string($tabler);
$sql = "SELECT * FROM $table WHERE id = 0";
$link=mysql_connect('host','user','pass');
$result = mysql_query($sql, $link);
...

因为 mysql_query 的第二个(也是可选的)参数应该是一个资源- 而不是一个字符串!

于 2013-09-22T18:24:33.333 回答