2017-03-14 2 views
1

Qu'est-ce qui me manque? Je construis une requête dynamique et prépare la requête pour postgres. Cela devrait fonctionner mais la déclaration eval ne fait pas de magie. Qu'est-ce que je rate?php eval et pg_execute ne fonctionne pas! arg

Existe-t-il un autre moyen de transmettre une chaîne avec plusieurs variables en plus de l'eval? Merci.

La brève explication.

$condition = array(); 
$values = array(); 
$pgarray = array(); 

$country = 254; 
$city = "Seattle"; 

$condition[] = " AND city = $"; 
$values[] = $city; 
$pgarray[] = "\$city"; 

$condition[] = " AND country = $"; 
$values[] = $country; 
$pgarray[] = "\$country"; 

$as = sizeof($condition); 

for ($x=0; $x<$as; $x++) { 
    $index = $x + 1; //We need to start at one not 0 
    $qclause = $qclause . $condition[$x] . $index . " "; 
} 

// This is what qclause equates to. 
// AND city = $1 AND country = $2 

$pgarray = implode(", ", $pgarray); 

// This is what pgarray equated to. 
// $city, $country 

$query = "Select companyid, city, name from company where 1 = 1 $qclause"; 
$result = pg_prepare($dbconnect, 'q1', $query); 
$runthis = "pg_execute(\$dbconnect, 'q1', array($pgarray))"; 


// This is what $runthis equated to. 
// pg_execute($dbconnect, 'q1', array($city, $country)) 

$result = eval($runthis); 

While ..... { 
    bla bla bla 
} 

Oh, je l'ai aussi fait

$result = eval('return $runthis'); 

Aucune erreur ne sont générés. La préparation est enregistrée dans le fichier journal Postgres, mais le fichier pg_execute ne se produit jamais.

Est-ce que je manque quelque chose de vraiment évident?

Merci

JT

+0

Pourquoi diable utilisez-vous 'eval()' pour cela? Invitez-vous les pirates informatiques à revendiquer votre serveur comme étant le leur? Utilisez * des instructions préparées * et n'utilisez pas 'eval()' – Xorifelse

+0

@Xorifelse C'est ce que fait l'eval. Génération dynamique d'instructions préparées Les problèmes sont que je ne peux pas sembler passer la liste séparée des variables dans le tableau de pg_execute. Quoi qu'il en soit, si vous regardez les exemples et le code, vous verrez que le but est un programme préparé. Finalement, ces variables seront récupérées à partir de $ _POST au lieu des variables de test dans le code. – user1970839

Répondre

0

Changé

$pgarray[] = "\$city"; 
$pgarray[] = "\$country"; 

À

$pgarray[] = $city; 
$pgarray[] = $country; 

Et

$runthis = "pg_execute(\$dbconnect, 'q1', array($pgarray))"; 

À

$result = pg_execute($dbconnect, 'q1', $pgarray); 

Et il a résolu le problème ou devrais-je dire mon code buggy.