Как использовать предложение MySQL WHERE в PHP? - PullRequest
3 голосов
/ 17 января 2010

Не могу передать что-либо из поля securityinfo.

for ($k = 1; $k < $fieldscnt; $k++)
{
    $selectsecurityname = mysql_query("SELECT `security name` FROM securityinfo WHERE symbol = '$symbol[$k]'") or die(mysql_error());
    $securityname = mysql_fetch_array($selectsecurityname);
    $sym = $symbol[$k]

    echo "<td>$securityname[$sym]</td>";
}

Как правило, я хочу найти строку, которая соответствует в поле symbol, а затем вернуть значение из поля securityinfo в той же строке.

Ответы [ 4 ]

4 голосов
/ 17 января 2010

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

Также вы должны обязательно использовать экранирование при интерполяции переменных в выражения SQL, подобные этому.

$selectsecurityname = mysql_query("
    SELECT `security name` FROM securityinfo 
    WHERE symbol = '" . mysql_real_escape_string($symbol[$k]) . "'") 
  or die(mysql_error());

Или, если есть смысл сделать это следующим образом:

$sym = mysql_real_escape_string($symbol[$k]);
$selectsecurityname = mysql_query("
    SELECT `security name` FROM securityinfo 
    WHERE symbol = '{$sym}'") 
  or die(mysql_error());
2 голосов
/ 17 января 2010

$securityname не полный массив сразу. Если вы хотите извлечь значения с помощью ключа, нам нужно перебрать каждую возвращенную строку и добавить ее в наш собственный массив:

while ($row = mysql_fetch_array($selectsecurityname) {
  $myArray[] = $row;
}

$sym = $symbol[$k];
echo "<td>".$myArray[$sym]."</td>";

Для получения дополнительной информации о mysql_fetch_array() см. Документацию: http://php.net/manual/en/function.mysql-fetch-array.php

0 голосов
/ 17 января 2010

Помимо ответов других, исправляющих части вашего примера, есть еще одна проблема:
Вы (пытаетесь) получить значение из таблицы в вашем примере. Но когда вы используете его, вы обращаетесь к нему как к массиву, а это, вероятно, просто строка (имя).

Полный пример, где все исправлено, будет выглядеть так:

for ($k = 1; $k < $fieldscnt; $k++)
{
    $sym = mysql_real_escape_string($symbol[$k]);
    $selectsecurityname = mysql_query("SELECT `security name` FROM securityinfo WHERE symbol='$sym'") or die(mysql_error());
    $securitynamearray = mysql_fetch_array($selectsecurityname);
    $securityname = $securitynamearray['security name'];

    echo "<td>$securityname</td>";
}

PS Для обычных переменных фигурные скобки не требуются, поэтому я их опустил.

PPS Вы можете использовать mysql_fetch_row вместо mysql_fetch_array для предотвращения (в конечном итоге) проблем с вашим именем поля и пробелом в нем:

$securitynamerow = mysql_fetch_row($selectsecurityname);
$securityname = $securitynamerow[0];
0 голосов
/ 17 января 2010

Если вы хотите получить доступ к индексам массива в строке, заключите их в фигурные скобки:

$a= array(
 'hello'=> 'world',
 'nice'=> 'one',
);

var_dump("This is the value of \$a['hello']: {$a['hello']}");

И переписать исходное утверждение как:

for ($k = 1; $k < $fieldscnt; $k++)
    {
    $selectsecurityname = mysql_query("SELECT `security name` FROM securityinfo WHERE symbol = '{$symbol[$k]}'") or die(mysql_error());
    $securityname = mysql_fetch_array($selectsecurityname);
    $sym = $symbol[$k]

    echo "<td>{$securityname[$sym]}</td>";

Конечно, вам нужно убедиться, что $symbol[$k] правильно экранирован для использования в операторе mysql.

...