2017-10-12 4 views
0

Ceci est mon code php:Pourquoi ai-je cette erreur? Erreur fatale: Uncaught Erreur: appel à une fonction de membre execute() sur booléenne dans

<?php 
$group = filter_input(INPUT_POST, 'groupchooser', FILTER_UNSAFE_RAW, 
FILTER_FLAG_STRIP_LOW); 

$db = mysqli_connect("localhost", "test", "password", "id3234074_posts"); 

$stmt = $db->prepare('SELECT TOP 10 titles, comments * FROM $group '); 

$stmt->execute(array(':id' => $_GET['id'])); 

$row = $stmt->fetch(); 


if($row['id'] == ''){ 
header('Location: ./'); 
exit; 
} 
?> 

J'ai essayé sans utiliser de préparer et ça me fait encore une erreur similaire au sujet de la valeur booléenne .

Répondre

2

Vous avez trois erreurs dans votre code:

SELECT TOP X SYNTAX SQL Server, mais à en juger par l'API dans votre code, vous utilisez MySQL, vous devez donc utiliser LIMIT X.

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10'); 

De plus, vous êtes paramètres Biding à la requête via execute() mais n'a pas de caractères génériques en elle. Donc, vous devez soit les ajouter avec bind_param() (par exemple, une clause WHERE), ou supprimer les paramètres de execute():

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10 WHERE id = ?'); 

$stmt->bind_param("i", $_GET["id"]); 

$stmt->execute(); 

Ou

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10'); 

$stmt->execute(); 

Enfin, vous avez deux champs sélectionne et le caractère générique *. Vous pouvez avoir ceci:

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10'); 

pour sélectionner titles et comments, ou ce

$stmt = $db->prepare('SELECT * FROM $group LIMIT 10'); 

pour sélectionner tous les champs de la table $group.


Sidenote: vous intégrez directement les données clients dans votre requête, et filter_input() n'aide pas. Vous devez être absolument, positivement, sûr à 100% de ce que vous entrez dans votre requête. Une option plus sûre pourrait être d'avoir une liste des possibles groups, et seulement permettre à l'utilisateur de choisir l'un d'entre eux:

$group = filter_input(INPUT_POST, 'groupchooser', FILTER_UNSAFE_RAW, 
FILTER_FLAG_STRIP_LOW); 
$groups = ["group1", "group2"]; 
if (!in_array($group, $groups)) { 
    throw new Exception("Invalid group"); 
} 
+0

thx pour l'aide. Et thx pour l'entrée, j'ai déjà un select dans mon code html qui permet seulement aux gens de sélectionner des groupes spécifiques. Mais même après avoir fait les changements que vous avez indiqués, il m'a quand même donné la même erreur f –

+0

@ AndréRöygaard Désolé, j'ai oublié de supprimer les astérisques. Essayez maintenant. A propos des groupes: les données que le client envoie sont ** complètement ** modifiables, peu importe quelles sont les options dans le select. Vous ** devez ** effectuer une vérification côté serveur. – ishegg

+0

Tout ce que j'essaie vraiment de faire, c'est d'obtenir la table "groupe" du serveur et de faire écho aux lignes "titres" et "commentaires". Je suis assez nouveau à ce sry XD –