Запрос не работает внутри функции - PullRequest
1 голос
/ 08 июля 2011

Ну, у меня есть эта функция в пользовательском скрипте для 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>"); 

}

If I echo ($ member_id);это работает просто отлично, но как только я помещаю это как там…, это ничего не делает.

Что я делаю не так?(

Ответы [ 5 ]

1 голос
/ 08 июля 2011

Ваша функция ничего не делает: она присваивает значение локальной переменной, а затем ничего не делает со значением и переменной.Он должен либо вернуть его (значение), либо выполнить запрос.

Также обратите внимание, что объединение строк для помещения переменной в запрос создает дыру в безопасности: http://bobby -tables.com /

Вы должны рассмотреть возможность использования mysqli и параметризованных запросов, как предлагается здесь: http://bobby -tables.com / php.html

Как минимум, рассмотретьцитируя значения, которые вы включаете в запрос, с помощью функций, предоставляемых PHP.Все ценности.Но параметризованные запросы лучше и проще.

1 голос
/ 08 июля 2011

это вся функция? Вы даже не запускаете запрос. Все, что вы делаете, это создаете строку с SQL и не запускаете ее.

Edit:

Я думаю, вам нужна помощь в понимании области видимости переменных в 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 опишет это лучше, чем я. но это должно дать вам представление о том, что не так.

0 голосов
/ 08 июля 2011

ваша функция создает только переменную $ queryDisplay (которая попадает в область действия функции)

0 голосов
/ 08 июля 2011

Вы только готовите sql-запрос, но не выполняете его.

0 голосов
/ 08 июля 2011

ваш запрос

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'];
    }
...