2012-03-19 27 views
28

Quando si passano i parametri denominati del modulo :name a PDOStatement::bindParam(), sembra che funzioni o meno i due punti iniziali.I due punti iniziali per i nomi dei parametri vengono passati a PDOStatement :: bindParam() facoltativo?

cioè o questo:

$statement->bindParam(':name', $var); 

o questo:

$statement->bindParam('name', $var); 

sembra funzionare.

Ecco la documentazione per PDOStatement::bindParam()

parametro

identificativo del parametro. Per una dichiarazione preparata che utilizza segnaposto con nome , questo sarà un nome parametro del modulo : nome. Per una dichiarazione preparata con utilizzando segnaposto di punti interrogativi, questa sarà la posizione 1-indexed del parametro .

Ciò significa che i due punti possono essere interrotti?

+0

Direi che i due punti sono necessari nell'espressione SQL, ma non quando si nomina (identifica) il nome con 'bindParam'. La funzione PDO è probabilmente meno rigida in quanto può definire la propria interfaccia per denominare il parametro. – hakre

risposta

26

No, dal momento che la documentazione non menziona questo penso che sia sicuro assumere che questo comportamento non è ufficialmente supportato e non dovrebbe essere invocato.

Tuttavia, in realtà funziona (in PHP 5.3.24 almeno) - internamente i due punti verranno aggiunti al parametro se manca (see ext/pdo/pdo_stmt.c:363 in the PHP 5.3.24 source code).

+0

Mi stavo chiedendo la stessa domanda. La mia ipotesi era che: è usato per rigorosamente differire colName con parole chiave sql. È bello sapere che PDO risolverà la mancanza: nei binding. Prenderò il consiglio di hakre e manterrò: in istruzioni SQL. – CoR

Problemi correlati