View Full Version : [PHP/MSSQL] - Sintassi query errata
Ciao a tutti,
ho un database MSSQL dal quale devo estrapolare dei dati. Questo è il codice:
<?php
$sql = 'SELECT CONCAT(RIGHT(dbo."UNITA LOCALI".PRECOD, 6), ".", dbo."UNITA LOCALI".COD) as TEST FROM dbo."UNITA LOCALI"';
$result = sqlsrv_query( $conn, $sql);
if( $result === false ) {die( print_r( sqlsrv_errors(), true));}
while($obj = sqlsrv_fetch_object( $result))
{
echo "<tr><td>";
echo $obj->TEST."</td></tr>";
}
sqlsrv_close($conn);
?>
la sintassi SQL funziona benissimo con Heidi, e il programma funziona bene con un generico SELECT * FROM dbo."UNITA LOCALI" (con gli opportuni aggiustamenti sugli echo).
Con questa richiesta SQL, mi viene restituito l'errore
Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Sintassi non corretta in prossimit� di ','. [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Sintassi non corretta in prossimit� di ','. ) )
Il vero problema credo siano gli apici e le virgolette... Ho provato di tutto ma non riesco a farlo funzionare... Avete suggerimenti?
Ciao a tutti,
ho un database MSSQL dal quale devo estrapolare dei dati. Questo è il codice:
<?php
$sql = 'SELECT CONCAT(RIGHT(dbo."UNITA LOCALI".PRECOD, 6), ".", dbo."UNITA LOCALI".COD) as TEST FROM dbo."UNITA LOCALI"';
$result = sqlsrv_query( $conn, $sql);
if( $result === false ) {die( print_r( sqlsrv_errors(), true));}
while($obj = sqlsrv_fetch_object( $result))
{
echo "<tr><td>";
echo $obj->TEST."</td></tr>";
}
sqlsrv_close($conn);
?>
la sintassi SQL funziona benissimo con Heidi, e il programma funziona bene con un generico SELECT * FROM dbo."UNITA LOCALI" (con gli opportuni aggiustamenti sugli echo).
Con questa richiesta SQL, mi viene restituito l'errore
Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Sintassi non corretta in prossimit� di ','. [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Sintassi non corretta in prossimit� di ','. ) )
Il vero problema credo siano gli apici e le virgolette... Ho provato di tutto ma non riesco a farlo funzionare... Avete suggerimenti?
fai una prova brutale, prova ad copiare da heidi le virgolette e copiarle nel codice php, uso raramente sql server e mai php ma con mysql e .net ho lo stesso problema (il carattere che mysql vuole per l'apice è diverso dal carattere della tastiera italiana )
iezzetto
23-05-2018, 10:39
Che versione stai utulizzando di SQL SERVER?
Una cosa che devi togliere sono le doppie virgolette.
Non sono riconosciute nella query.
lo schema (dbo) se è unico puoi evitare di inserirlo in quanto di default punta su quello.
La query dovresti provare a farla in questo modo
$sql = 'SELECT CONCAT(RIGHT([UNITA LOCALI].PRECOD, 6), \'.\', [UNITA LOCALI].COD) as TEST FROM [UNITA LOCALI]';
Dopo esperimenti vari e testa rotta contro il muro per la disperazione, ho trovato la soluzione!
PREMESSA: SQL Server 11.0.6020 su MS Server2012 R2 + PHP 7.2
SOLUZIONE:
la query che avevo indicato funziona bene con Heidi. Con PHP ho risolto usando la barra prima degli apici nel comando CONCAT ( \'.\' ).
Invece, non so come mai, le " vanno bene. Però mi piace anche la soluzione delle parentesi [quadre]. rRnde più leggibile il codice.
Ora finalmente funziona!
Grazie :)
iezzetto
25-05-2018, 12:25
Si le parentesi evitano prarecchi problemi di lettura.
Anche se io generalmente non amo chiamare gli oggetti con gli spazi. Di solito concateno con gli underscore!
Scusami se ti chiedo.
Ma lavori sotto ambiente linux o windows?
Che driver hai usato per la connessione a SQLSERVER con php? PDO?
Ciao
Purtroppo il database no l'ho creato io, ma fa parte di un programma per la gestione dei rifiuti. Oltre che a costare uno sproposito, il programma è lento come la morte (dico solo che quando si apre una "maschera" impiega circa 2 secondi dal click.... tempi inaccettabili).
Da qui l'idea di usare php per visualizzare i dati di cui ho bisogno, senza troppi giri e perdite di tempo.
Lavoro in ambiente windows, e si, ho usato i drivers PDO per la connessione al database.
iezzetto
04-06-2018, 10:19
Purtroppo il database no l'ho creato io, ma fa parte di un programma per la gestione dei rifiuti. Oltre che a costare uno sproposito, il programma è lento come la morte (dico solo che quando si apre una "maschera" impiega circa 2 secondi dal click.... tempi inaccettabili).
Da qui l'idea di usare php per visualizzare i dati di cui ho bisogno, senza troppi giri e perdite di tempo.
Lavoro in ambiente windows, e si, ho usato i drivers PDO per la connessione al database.
La maggior parte della lentezza è data dalle query fatte con i piedi (non so se le hai fatte tu! :D ).
MSSQL ficca tutto nella ram, e più ne ha, più se ne prende (se non è tutto ottimizzato)
Lavora molto sull'ottimizzazione delle query e utilizza l'analizzatore delle query di SQL.
Ti dà tutte le tempistiche ed è utile per ottimizzare!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.