Come usare MySQL clausola WHERE in PHP?
-
21-09-2019 - |
Domanda
Non riesco a passare nulla dal campo 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>";
}
In sostanza, voglio per cercare la riga che ha una partita nel campo symbol
, quindi restituire il valore dal campo securityinfo
nella stessa riga.
Soluzione
Oltre alle risposte degli altri fissaggio parti del tuo esempio, c'è un altro problema:
Si (prova a) afferrare un valore da una tabella nel tuo esempio. Ma quando lo si utilizza si accede come un array, mentre probabilmente è solo una stringa (un nome).
Un esempio completo con tutte le cose fisse sarebbe simile a questa:
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 Le parentesi graffe non sono necessarie per le variabili regolari, così li ho omessi.
PPS Si potrebbe utilizzare mysql_fetch_row
invece di mysql_fetch_array
per evitare che (eventualmente) problemi con il fieldname e lo spazio che contiene:
$securitynamerow = mysql_fetch_row($selectsecurityname);
$securityname = $securitynamerow[0];
Altri suggerimenti
PHP ha alcune limitazioni su come è possibile utilizzare le variabili all'interno di stringhe tra virgolette. Quindi non è possibile ottenere elementi di un array come si sta facendo.
Inoltre, si dovrebbe essere sicuri di utilizzare fuggire quando si interpolare variabili in espressioni SQL del genere.
$selectsecurityname = mysql_query("
SELECT `security name` FROM securityinfo
WHERE symbol = '" . mysql_real_escape_string($symbol[$k]) . "'")
or die(mysql_error());
O se ha più senso di farlo in questo modo:
$sym = mysql_real_escape_string($symbol[$k]);
$selectsecurityname = mysql_query("
SELECT `security name` FROM securityinfo
WHERE symbol = '{$sym}'")
or die(mysql_error());
$securityname
non è gamma completa immediatamente. Se vuoi tirare fuori i valori tramite un tasto, abbiamo bisogno di scorrere ogni riga restituita e aggiungerlo alla nostra matrice:
while ($row = mysql_fetch_array($selectsecurityname) {
$myArray[] = $row;
}
$sym = $symbol[$k];
echo "<td>".$myArray[$sym]."</td>";
Per ulteriori informazioni su mysql_fetch_array()
, consultare la documentazione: http: / /php.net/manual/en/function.mysql-fetch-array.php
Se si desidera accedere indici di matrice in una stringa, racchiuderli tra parentesi graffe:
$a= array(
'hello'=> 'world',
'nice'=> 'one',
);
var_dump("This is the value of \$a['hello']: {$a['hello']}");
e ri-scrivere la sua dichiarazione originale come:
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>";
Naturalmente, è necessario assicurarsi che sia sfuggito $symbol[$k]
correttamente per l'utilizzo in una dichiarazione mysql.