Php 创建从SQL检索信息的函数

Php 创建从SQL检索信息的函数,php,sql,function,func,Php,Sql,Function,Func,我在网站上搜索了答案,但找不到我的具体问题的答案。 我有两个文件,第一个是我的index.php当然,第二个是我的functions.php文件,它显然包含函数,我做了这个函数: 函数sql\u get$lang、$tabler、$rower{ if ($lang == "heb") { $result = mysql_query("SELECT * FROM %s WHERE id = 0", mysql_real_escape_string($tabler));

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

函数sql\u 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'];
}
这段代码应该从一个get中获取关于语言的信息,它得到了,这一切都很好,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_数组期望参数1为resource,在第24行的/home/elenbyin/public_html/elenby.co.il/vadim/functions.php中给出空值

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

我会感谢那些试图帮助我的人,尤其是那些帮助我的人


非常感谢!

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

第二,将变量作为第二个参数传递给mysql\u query,但mysql\u query希望查询作为第一个参数完成,第二个参数应该是tht连接到数据库的连接资源,而您没有

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

这将为您创建查询,假设您已打开数据库连接:

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

注意:mysql已弃用。您不应该使用它。请改用mysqli或PDO。如果使用mysqli,您需要更加严格地传递数据库连接。

正如Amal建议的那样-最好不要使用mysql函数,因为它们不仅弃用,而且容易受到sql注入的攻击

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

$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的第二个可选参数,查询应该是a-而不是字符串!

规则1:你不使用函数-它们已被弃用。你可以使用,或者你是否注意到你在if和else子句中做了完全相同的事情?是的,我注意到,在我让它以那种方式工作后,它会被更改。如果我可以问,为什么sprintf?OP原始查询的格式包含一个printf占位符%s,因此我使用sprintf创建查询。有很多其他方法可以做到这一点,但sprintf是一种方便的方法,可以创建一个包含大量参数的查询,这些参数需要转义或其他预处理。在这种情况下,这真是太过了。无论我的代码是什么,我t保持不变错误:警告:mysql_结果预期参数1为resource,布尔值在/home/elenbyin/public_html/elenby.co.il/vadim/tryout.php中在线给出14@LiorElenby这与您上面发布的错误不同。您的查询失败,可能是因为您尚未打开到数据库的连接。我认为select*from$table,其中id=0,mysql\u real\u escape\u stringtabler是错误的。@koko从发布的链接中检查函数的签名:resource mysql\u query string$query[,resource$link\u identifier=NULL]第二个可选参数应该是资源,而不是字符串;