J'essaie ce code:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$result->execute();
while ($data = $result->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
mais il lance l'erreur suivante
[Ven 15 juin 12:13:11 2012] [erreur] [client 127.0.0.1] PHP Erreur fatale: appel à la méthode non définie mysqli_stmt :: fetch_assoc () dans [monfichier.php]
Et j'ai aussi essayé:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$rows = $result->execute();
while ($data = $rows->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
cela fait ceci:
[Ven Jun 15 12:22:59 2012] [erreur] [client 127.0.0.1] PHP Erreur fatale: appel à une fonction membre fetch_assoc () sur un non-objet dans [monfichier. php]
Que puis-je faire d'autre pour obtenir un résultat ou ce que je fais mal? J'ai besoin du tableau assoc de DB ressemblant à $data[0]["id"] = 1
En fait, vous pouvez faire cela assez facilement, vous ne pouvez pas le faire avec l'objet mysqli_stmt
, vous devez extraire le sous-jacent mysqli_result
, vous pouvez le faire en appelant simplement mysqli_stmt::get_result()
. Remarque: cela nécessite l'extension mysqlnd (MySQL Native Driver) qui n'est pas toujours disponible.
Cependant, le point ci-dessous sur la recommandation de PDO sur MySQLi est toujours valable, et c'est un excellent exemple de pourquoi: l'API MySQLi userland n'a aucun sens. Il m'a fallu plusieurs années de travail intermittent avec MySQLi pour découvrir le mécanisme décrit ci-dessus. Maintenant, j'admets que séparer les concepts de l'instruction et de l'ensemble de résultats est logique, mais dans ce cas, pourquoi une instruction a-t-elle une méthode fetch()
? Matière à réflexion (si vous êtes toujours assis sur la clôture entre MySQLi et PDO).
Pour être complet, voici un exemple de code basé (vaguement) sur le code d'origine dans la question:
// Create a statement
$query = "
SELECT *
FROM `mytable`
WHERE `rows1` = ?
";
$stmt = $this->mysqli->prepare($query);
// Bind params and execute
$stmt->bind_param("i", $id);
// Extract result set and loop rows
$result = $stmt->get_result();
while ($data = $result->fetch_assoc())
{
$statistic[] = $data;
}
// Proof that it's working
echo "<pre>";
var_dump($statistic);
echo "</pre>";
Tu peux faire:
$conn = mysqli_connect('Host','username','password','database')
$query = 'select * from tablename';
$result = $conn->query($query);
$data = mysqli_fetch_all($result,MYSQLI_ASSOC);
$data
Contient tous les résultats dans un tableau d'association.
* Il convient de noter que cette fonction mysqli_fetch_all()
fonctionne uniquement avec le package mysqlnd
. http://php.net/manual/en/mysqli-result.fetch-all.php