PHP:funzione che opera una query su argomento

davideb93

Nuovo Utente
19 Feb 2016
5
0
0
Sera a tutti mi sono imbattuto in un potenziale problema. E' possibile creare funzionioni di questo tipo in php?

function f1($a,$b){
$prova = $con->query("SELECT * FROM tabella WHERE attributo1 = $a AND attributo2 = $b");}

function f(2$table){
$prova = $con->query("SELECT * FROM $table");}

Poi mi servirebbe poterle chiamare nel seguente modo

f1("val1","val2") e f2("tabella1")

Ho provato anche cose del tipo "SELECT....attributo1 = ".$a." AND "etc.. ma non funzionano.

Io ho definito le funzioni nello stesso file in cui vengono richiamate e il mio presentimento sull'errore (query riferita a un non oggetto) è che quando viene effettuato il parsing del file quando raggiunge la riga dentro la funzione f1 esegua subito la query senza considerare che è solo il corpo di una funzione e chiaramente da errore perchè $a e $b non sono stati definiti. Qualcuno ha qualche idea? Buonaserata
 

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
purtroppo non hai definito $con all'interno della funzione,
per non doverla passare come parametro puoi definirla come global
ovvero la variabile definita nel corpo, vale anche nelle funzioni
PHP:
function f2($table){
    global $con;
    $prova = $con->query("SELECT * FROM $table");}
 

davideb93

Nuovo Utente
19 Feb 2016
5
0
0
Grazie per la risposta , ecco il mio codice:

PHP:
$user = "***";
$pass = "***";
$db = "***";
$host = "localhost";

$con = mysqli_connect($host,$user,$pass,$db);
        if (mysqli_connect_errno())
       {
           echo "Failed to connect to MySQL: " . mysqli_connect_error();
       }

function f2($table){
    $prova = $con->query("SELECT * FROM $table");}

devo comunque impostare la variabile global come hai fatto tu? anche se è già definita sopra?
 

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
devo comunque impostare la variabile global come hai fatto tu?
SI
anche se è già definita sopra?
a differenza di altri linguaggi, php vuole tutte le variabili definite all'interno della funzione, non considerando quelle già definite altrove,
alla funzione si passano i valori come parametri e/o con "global" (un metodo non esclude l'altro),
trattandosi della "connessione" al db, la riterrei "global" in tutte le funzioni che hai definito
ciao
Marino

ps,
nel tuo codice non vedo la chiamata alla funzione, suppongo tu abbia postato un "pezzetto" di codice a sostegno dell'argomento

nella funzione manca anche il return ...., ovvero scritta a quel modo, non ti ritorna nulla
anche in questo caso puoi usare "return $prova" o mettere "$prova" nel global
 
Ultima modifica:

davideb93

Nuovo Utente
19 Feb 2016
5
0
0
nel tuo codice non vedo la chiamata alla funzione, suppongo tu abbia postato un "pezzetto" di codice a sostegno dell'argomento
esatto.
Comunque una cosa non capisco , la mia funzione dovrebbe solo effettuare una query con il database può anche non ritornare niente.
 

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
occorre distinguere il risultato di un operazione, dalla logica con cui ottenerlo e trattarlo,

l'operazione di ricerca (select) nel database (query), restituisce sempre un risultato,
il risultato può essere "pieno", nel caso abbia trovato dei dati, o "vuoto", nel caso la selezione non abbia trovato nulla,
in relazione alle condizioni poste

la funzione fa parte della logica, con cui viene eseguita la sequenza delle operazioni, che portano ad avere un determinato risultato finale

di conseguenza il corpo del programma e le funzioni devono integrarsi, logicamente tra loro,
scambiando le dovute informazioni

perchè la funzione deve restituire il risultato "pieno" o "vuoto" che sia ?
perchè il programma (script) possa operare nell' ottenere il risultato per cui é stato impostato

d'altra parte perché passare alla funzione dei parametri con cui operare e non ottenere il risultato dell'operazione ?

il codice riscritto sotto, fa trovare nel corpo (main) del programma il risultato su cui operare

spero sia sufficiente
ciao
Marino

PHP:
$user = "***";
$pass = "***";
$db = "***";
$host = "localhost";

$con = mysqli_connect($host,$user,$pass,$db);
        if (mysqli_connect_errno())
       {
           echo "Failed to connect to MySQL: " . mysqli_connect_error();
       }
$prova = f2("nomedellatabella");
echo "elementi trovati : ".count($prova);

function f2($table)
{
  global $con
  return $con->query("SELECT * FROM $table");
}

ma si poteva anche scrivere
PHP:
$prova = f2($con, "nomedellatabella");
function f2($con, $table)
evitando il "global"
 

davideb93

Nuovo Utente
19 Feb 2016
5
0
0
Ciao marino. .si mi stavo confondo. .chiaro che se selezioni qualcosa da qualche parte andrà messo il risultato...ero convinto stessimo parlando di inserimento. Per quello il discorso è analogo?
 

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
nei tuoi esempi c'è una select per questo sono rimasto stupito nel non vedere gestito il risultato,

in ogni caso per rispondere alla tua ultima domanda, questo è il metodo che uso nel caso di insert update e delete in tutte le mie applicazioni
PHP:
public function queryM($sql, $params=array())    // return the involved rows counted (insert update delete)
{
  return $this->BindParams($sql, $params)->rowCount();
}
come vedi mi restituisce sempre come risultato, il numero di elementi coinvolti nell'operazione,
se inserisco, modifico, cancello qualche elemento nel database, voglio essere sicuro che l'operazione venga eseguita
non eseguo una query di questo tipo per caso, ma perchè deve agire, quindi ne controllo il risultato

altri potranno dirti che non lo fanno, ma io ho sempre preferito le certezze
ciao
Marino
 
Discussioni simili
Autore Titolo Forum Risposte Data
X Php e funzione che restituisce byte PHP 2
P Funzione jQuery Ajax invio file a php jQuery 1
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
D Come usare funzione php PHP 6
Shyson Modificare funzione php PHP 15
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
L Problema funzione mail() PHP PHP 3
maxnegri [PHP]Funzione di calcolo prezzo di una camera in un range di date PHP 62
L [PHP] problema count messo in una funzione. PHP 1
Monital funzione php si ripete due volte PHP 6
GiErre [PHP] [HTML] Disabilitare un link in funzione della piattaforma PHP 7
Monital Funzione php e campo database come variabile PHP 6
M PHP - Funzione non e scrive il risultato PHP 3
F [PHP] La funzione setcookie PHP 0
C [RISOLTO][PHP] Funzione ONclick PHP 14
A [PHP] Problema invio mail con funzione mail() PHP 3
C richiamare una funzione in un altro script php PHP 1
S [PHP] errore funzione sleep PHP 5
MarcoGrazia [PHP] Verifica dell'input utente tramite funzione generica. PHP 0
B [PHP]la pagina php non si carica se aggiungo funzione while PHP 10
A Chiamata funzione PHP con onclick PHP 8
alexbrasile PHP convertire la funzione fsockopen in curl PHP 0
Gaetano1991h [PHP] Chi mi sa spiegare la funzione di questo codice? PHP 1
M [PHP] Errore nell' assegnazione della variabile $this->id su una funzione PHP 1
trattorino [PHP] funzione per visualizzare solo carattere PHP 2
S PHP: inviare via email contenuto di una funzione PHP 4
A Chiamare una specifica funzione in una pagina php PHP 1
G Problema php relativo a funzione di un pulsante PHP 8
JackIlPazzo Chiamare una funzione specifica di php da una richiesta ajax? PHP 2
M Far partire una funzione/codice php con javascript Javascript 1
JackIlPazzo Eseguire funzione php senza ricaricare pagina? PHP 3
neo996sps [PHP e funzioni con PDO] Funzione per generare corpo tabella PHP 1
V Chiamata funzione php da javascript Ajax 3
X Conversione funzione php PHP 0
M Disabilitare alcune funzione php da scipt PHP 3
gandalf1959 funzione mail() e variabili su un link nel body in formato xxx.php?$a=$codicecontrollo PHP 2
C Limiti funzione mail() di php PHP 1
P Passare un valore, o arriare una funzione da pagina2.php in pagina1.php Javascript 2
M Applicare funzione php ad ogni elemto html Ajax 3
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
F funzione javascript all'interno di un codice php PHP 38
G funzione include di php e paramentri variabili PHP 4
X NOW() funzione mysql eseguita da php PHP 6
I Richiamare funzione jquery all'invio del form php Javascript 6
S php problemi di funzione header usando la fuzione di jquery post PHP 4
S problema con funzione php PHP 3
A Funzione exec di php, errore 127 PHP 0
M PhP Problema funzione mssql PHP 5
H Funzione php non viene richiamata! PHP 41
C Funzione PHP non ottiene nomi da puntatori PHP 1

Discussioni simili