查询在函数内部不起作用

时间:2011-07-07 20:01:23

标签: php function

好吧,我在SMF的自定义脚本中有这个功能:

$query = "SELECT id_member, real_name, id_group FROM smf_members WHERE id_group > 0 AND id_group != 9 AND id_group != 12 ORDER BY id_group ASC";

$result = mysql_query($query, $con);


function Display($member_id)
{
$queryDisplay = "SELECT value
    FROM smf_themes
    WHERE id_member = ".$member_id."
    AND variable = 'cust_realfi'";
}

while ($row = mysql_fetch_array($result)) {

Display($row['id_member']);

$resultDisplay = mysql_query($queryDisplay, $con);

echo ("<td>"); 

if (mysql_num_rows($resultDisplay) == 0) echo ("Not yet entered");
else {
 while ($rowDisplay = mysql_fetch_array($resultDisplay)) {
  if (strlen($rowDisplay['value']) > 0) echo ("".$rowDisplay['value'].""); 
 }
}
echo ("</td>"); 

}

如果我回音($ member_id);它工作得很好,但只要我把它放在那里^,它什么都不做。

我做错了什么? :(

5 个答案:

答案 0 :(得分:1)

是整个功能吗?您甚至没有运行查询。你所做的只是用sql创建一个字符串而不是运行它。

编辑:

我认为你需要帮助理解PHP中的变量范围。

http://php.net/manual/en/language.variables.scope.php

基本上它表示函数内部的代码无法访问函数外部定义的变量(大多数变量)。例如:

$test = "test value";

function testFunc(){
    //Since the code inside this function can't
    //access the variables outside of this function
    //the variable $test below is just an empty
    //variable.
    echo $test;
}
testFunc();

这也可以反过来,在函数内部无法访问函数内部的变量。这就是你做错了。

function testFunc(){
    $someNewVar = "some new string";
}
testFunc();

//$someNewVar is never defined outside the function so it doesn't exist.
echo $someNewVar;

函数运行完成后,在内部声明和使用的所有变量都将从内存中删除。

因此要将变量放入函数中,需要将其作为参数传递。要获取变量,您需要函数返回变量。

function testFunc($testVar){
    echo $testVar;
    $testVar = "some new string";
    return $testVar;
}
$test = "test val";
//passing the variable into the function and setting
//the return value back into $test.
$test = testFunc($test);
echo $test; //test now has "some new string".

老实说,php页面会比我更好地描述它。但这应该让你知道出了什么问题。

答案 1 :(得分:1)

您的函数不执行任何操作:它为局部变量赋值,然后对值和变量不执行任何操作。它应该返回它(值)或执行查询。

另请注意,执行字符串连接以将变量放入查询中会产生安全漏洞:http://bobby-tables.com/

您应该考虑使用此处建议的mysqli和参数化查询:http://bobby-tables.com/php.html

至少,请考虑使用PHP提供的函数引用查询中包含的值来执行此操作。所有价值观。但参数化查询更好更容易。

答案 2 :(得分:0)

您的查询

function Display($member_id){
$queryDisplay = "SELECT value FROM smf_themes WHERE id_member = ".$member_id." AND variable = 'cust_realfi'";
}

正确的查询

    function Display($member_id){
    $queryDisplay = mysql_query("SELECT value FROM smf_themes WHERE id_member = '$member_id' AND variable = 'cust_realfi'");
    while ($row = mysql_fetch_array($queryDisplay));
    return $row['value'];
    }

答案 3 :(得分:0)

您只是准备sql查询,但没有执行它。

答案 4 :(得分:0)

你的函数只生成一个变量$ queryDisplay(在函数范围内被捕获)