Newsgroup: it.comp.www.php
Titolo: Query sbagliata. Forse errore di sintassi

Ciao, 
	sicuramente si tratta di un fesseria, ma la situazione č la
seguente:
$imp = $_GET['modello'];
print $imp; 
// 256
print (gettype ($imp));
// string ... giusto cosě
$sql = "SELECT `macchinari`.`id_mac` AS 'cod', `marca`.`marca` ,
`macchinari`.`tipo` , `macchinari`.`modello` , `status`.`status` ,
`macchinari`.`id_tecno`, `tecno`.`tecno`
FROM `macchinari` , `marca` , `status`, `tecno`
WHERE `macchinari`.`id_marca` = `marca`.`id_marca`
AND `macchinari`.`status` = `status`.`id_status`
AND `macchinari`.`modello` =`".$imp."`
AND `macchinari`.`id_cat` =1
AND `macchinari`.`id_tecno` = `tecno`.`id_tecno`
AND (`macchinari`.`visibile` =1
OR `macchinari`.`visibile` =2)
ORDER BY `macchinari`.`tipo`, `macchinari`.`id_mac` DESC";
Risultato ... vuoto.
Se faccio cosě invece lo script va:
$sql = "SELECT `macchinari`.`id_mac` AS 'cod', `marca`.`marca` ,
`macchinari`.`tipo` , `macchinari`.`modello` , `status`.`status` ,
`macchinari`.`id_tecno`, `tecno`.`tecno`
FROM `macchinari` , `marca` , `status`, `tecno`
WHERE `macchinari`.`id_marca` = `marca`.`id_marca`
AND `macchinari`.`status` = `status`.`id_status`
AND `macchinari`.`modello` =`256`
AND `macchinari`.`id_cat` =1
AND `macchinari`.`id_tecno` = `tecno`.`id_tecno`
AND (`macchinari`.`visibile` =1
OR `macchinari`.`visibile` =2)
ORDER BY `macchinari`.`tipo`, `macchinari`.`id_mac` DESC";
dove sto sbagliando? mi sapete aiutare?
PS se in $sql sostituisco $_GET['modello'] al posto di $imp ovviamente
non cambia nulla.

// string ... giusto cosě
Intanto dagli una escapata... o se e' un numero, convertilo
esplicitamente.
$sql = <<<QUERY
SELECT macchinari.id_mac AS cod, marca.marca,
	macchinari.tipo, macchinari.modello, status.status,
	macchinari.id_tecno, tecno.tecno
FROM macchinari JOIN marca USING (id_marca)
	JOIN status ON (macchinari.status = status.id_status)
	JOIN tecno USING (id_tecno)
WHERE macchinari.modello = "$imp"
	AND macchinari.id_cat=1
	AND macchinari.visibile IN (1,2)
ORDER BY macchinari.tipo, macchinari.id_mac DESC;
QUERY;
a me funziona. Fatti stampare a video la query nei due casi. Cosi'
scoprirai che in un caso compare =`"256"` e nell'altro =`256` :-)
(incidentalmente - suggerirei di rinominare macchinari.status come
macchinari.id_status).
Leonardo
--
The stars have not dealt me the worst they could do:
My pleasures are plenty - my troubles are two.
But oh!, my two troubles, they reave me of rest:

 scoprirai che in un caso compare =`"256"` e nell'altro =`256` :-)
Tra l'altro ` è un delimitatore valido?


wrote:

a me il tuo script da errore:
#1054 - Unknown column 'test.status.id_tecno' in 'on clause' 

 wrote:

Grazie mille ... ho trovato il bug
mi ero perso nelle svariate righe di codice ... ad un certo punto mi
passava come GET l'id_mac e non il modello ... grazie mille.
Maledizione ... č domenica pure per me :P

#1054 - Unknown column 'test.status.id_tecno' in 'on clause' 
Hum. Driver DB diverso, forse... a dimostrazione che siamo nel NG
sbagliato :-) . In effetti USING li' e' ambiguo,
	JOIN tecno USING (id_tecno)
andrebbe meglio come
	JOIN tecno ON (tecno.id_tecno = macchinari.id_tecno)
Comunque, il suggerimento migliore era il secondo (che lascio li'
sopra quotato), ed e' sempre una buona cosa da fare quando sembra
che le cose non vadano.
