Il semble être un bug ou problème lorsque j'utilise PHP PDO fetchOject
avec la requête ci-dessous,Problème avec PHP PDO fetchOject
Requête:
SELECT
p.*,
t.*
FROM root_pages AS p
LEFT JOIN root_templates AS t
ON p.tmp_id = t.tmp_id
WHERE p.pg_url = ?
AND ? IS NOT NULL
OR p.pg_url = ?
AND p.pg_hide != ?
appelé d'une classe PHP PDO db,
$page = $this->database->fetch_object($sql,array(
$pg_url,
NULL,
$pg_url,
1
));
résultat:
SQLSTATE [HY 093]: numéro de paramètre non valide: nombre de variables liées ne correspond pas à nombre de jetons
méthode PHP PDO FetchOject
de la classe PDO db,
# return the current row of a result set as an object
public function fetch_object($query, $params = array())
{
try
{
# prepare the query
$stmt = $this->connection->prepare($query);
# if $params is not an array, let's make it array with one value of former $params
if (!is_array($params)) $params = array($params);
# execute the query
$stmt->execute($params);
# return the result
return $stmt->fetchObject();
//return $stmt->fetch(PDO::FETCH_OBJ);
}
catch (PDOException $e)
{
# call the get_error function
$this->get_error($e);
}
}
Il ne sera bien si j'appelle la méthode comme celui-ci,
$page = $this->database->fetch_object($sql,array(
$pg_url,
1,
$pg_url,
1
));
Mais je peux obtenir le résultat sans erreur lorsque je teste une de la requête ci-dessous avec phpMyAdmin
,
SELECT
p.*,
t.*
FROM root_pages AS p
LEFT JOIN root_templates AS t
ON p.tmp_id = t.tmp_id
WHERE p.pg_url = 'exhibition sample 6'
AND '1' IS NOT NULL
OR p.pg_url = 'exhibition sample 6'
AND p.pg_hide != '1'
ou
SELECT
p.*,
t.*
FROM root_pages AS p
LEFT JOIN root_templates AS t
ON p.tmp_id = t.tmp_id
WHERE p.pg_url = 'exhibition sample 6'
AND NULL IS NOT NULL
OR p.pg_url = 'exhibition sample 6'
AND p.pg_hide != '1'
Toutes les idées que j'ai manqué lors de l'utilisation fetchOject
?
EDIT:
$sql ="
SELECT
p.*,
t.*
FROM root_pages AS p
LEFT JOIN root_templates AS t
ON p.tmp_id = t.tmp_id
WHERE p.pg_url = 'exhibition sample 6'
AND ? IS NOT NULL
OR p.pg_url = 'exhibition sample 6'
AND p.pg_hide != '1'
";
Aucune erreur avec
$item = $connection->fetch_assoc($sql,1);
ou
$item = $connection->fetch_assoc($sql,NULL);
la méthode fetch_assoc
,
# fetch a single row of result as an array (= one dimensional array)
public function fetch_assoc($query, $params = array())
{
try
{
# prepare the query
$stmt = $this->connection->prepare($query);
# if $params is not an array, let's make it array with one value of former $params
if (!is_array($params)) $params = array($params);
# execute the query
$stmt->execute($params);
# return the result
return $stmt->fetch();
}
catch (PDOException $e)
{
# call the get_error function
$this->get_error($e);
}
}
merci Jon, s'il vous plaît vérifier ma modification ci-dessus. Je peux passer 'null' avec' fetch' sans lier les données. comment venir? – laukok
J'ai trouvé l'erreur dans ma classe. rien de mal à passer null dans fetchObject. Merci pour l'aide. – laukok