функция / класс запроса php - PullRequest
2 голосов
/ 23 августа 2010

Должно быть, понедельник, жара или я тупой (возможно, последний), но из-за жизни я не могу заставить работать простую функцию php.

У меня простой запрос

$sql = mysql_query("SELECT * FROM table WHERE field_name = '$input'");

Который я хочу запустить через функцию: скажем:

function functionname($input){

    global $field1;
    global $field2;
    $sql = mysql_query("SELECT * FROM table WHERE field_name = '$input'");
    while($row = mysql_fetch_array($sql)) :
    $field1[] = $row['field1'];
    $field2[] = $row['field2'];
    endwhile;   
    mysql_free_result($sql);

}

Чтобы я мог вызывать функцию в разных местах с разными «входами».Затем переберите результаты с помощью цикла foreach.

Работает нормально при первом вызове функции, но всегда выдает ошибки там после.

Как сказано: «Должно быть, понедельник, тепло илия глупый (вероятно, последний) ".

Предложения, пожалуйста, поскольку я действительно хочу, чтобы только одна функция вызывала, а не переписывала запрос каждый раз.

Это сообщение об ошибке

Fatal error: [] operator not supported for strings in C:\xampp\htdocs\functions.php on line 270

Ответы [ 6 ]

1 голос
/ 23 августа 2010

На мой взгляд, это довольно необычный и даже бесполезный подход вообще.
Эта функция слишком локализована.
Сделать функцию общего назначения было бы намного лучше.

<?
function dbgetarr(){
  $a = array();
  $query = array_shift($args);
  foreach ($args as $key => $val) {
    $args[$key] = "'".mysql_real_escape_string($val)."'";
  }
  $query = vsprintf($query, $args);

  $res = mysql_query($query);
  if (!$res) {
    trigger_error("dbgetarr: ".mysql_error()." in ".$query);
    return FALSE;
  } else {
    while($row = mysql_fetch_assoc($res)) $a[]=$row;
  }
  return $a;
}

и затем назовите это так

$data = dbgetarr("SELECT field1,field2 FROM table WHERE field_name = %s",$input);
foreach ($data as $row) {
  echo $row['field1']." ".$row['field1']."<br>\n";
}
1 голос
/ 23 августа 2010
function functionname($input){ 
    $sql = mysql_query("SELECT field1,field2 FROM table WHERE field_name = '$input'"); 
    $result = array('field1' => array()
                    'field2' => array()
                   );
    while($row = mysql_fetch_array($sql)) : 
       $result['field1'][] = $row['field1']; 
       $result['field2'][] = $row['field2']; 
    endwhile;    
    mysql_free_result($sql); 
    return $result;
} 
1 голос
/ 23 августа 2010

кажется, что где-то $ field1 или $ field2 конвертируются в строки, и вы не можете применить [] к строке ... я бы сказал, что вы должны сделать:

$field1 = array();
$field2 = array();

перед темWHILE петля

1 голос
/ 23 августа 2010

Проблема в том, что так называемые массивы являются строками!

global $field1;
global $field2;
var_dump($feild1,$feild2); //Will tell you that there strings

Прочитайте ошибку правильно!

[] оператор не поддерживается для строк

И единственное место, где вы используете [], - это значения $feild - X

GLOBAL должен работать, потому что ошибка говорит вам отип данных, т.е. строка, поэтому они должны быть импортированы в область.


Другое дело, почему вы выбираете все столбцы, когда используете только 2 из них, измените свой запрос на:

$sql = mysql_query("SELECT feild1,feild2 FROM table WHERE field_name = '$input'");

Другое дело, что использование mysql_fetch_array witch возвращает целочисленный индексированный массив, где, как вы хотите mysql_fetch_assoc, чтобы получить ключи.

while($row = mysql_fetch_assoc($sql)) :
    $field1[] = $row['field1'];
    $field2[] = $row['field2'];
endwhile;

Что ябудет делать

function SomeFunction($variable,&$array_a,&$array_b)
{
    $sql = mysql_query("SELECT field1,field2 FROM table WHERE field_name = '$variable'");
    while($row = mysql_fetch_assoc($sql))
    {
        $array_a[] = $row['field1'];
        $array_b[] = $row['field2'];
    }
    mysql_free_result($sql);
}

Тогда используйте так.

$a = array();
$b = array();
SomeFunction('Hello World',&$a,&$b);
0 голосов
/ 23 августа 2010

Не знаю, прав я или нет. Но я советую попробовать это:

function functionname($input){

    global $field1;
    global $field2;
    $sql = mysql_query("SELECT * FROM `table` WHERE `field_name` = '" . $input . "'");
    while($row = mysql_fetch_assoc($sql)) :
    $field1[] = $row['field1'];
    $field2[] = $row['field2'];
    endwhile;   
    mysql_free_result($sql);

}
0 голосов
/ 23 августа 2010

Чтобы понять вашу проблему, нам нужна ошибка, однако вы уверены, что делаете это правильно?

Зачем вам нужно вызывать функцию несколько раз, если вы просто меняете значение поля ввода?

Вы могли бы улучшить свой оператор SQL, чтобы он возвращал полный набор результатов, который вам нужен в первый раз ... т.е. SELECT * FROM table GROUP BY field_name;

Не уверен, что этот подход работает в вашем сценарии, но в целом вы должны стремиться сократить количество обращений к вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...