dynamiasche prepared statement
Ik heb de volgende functie, waarbij ik d.m.v een functie dynamische gegevens wil halen.
Ik krijg altijd de volgende error bij bind:
Als ik deze echo $sql
bijv "select naam from categorieen where id = ? "
Als ik die rechtstreeks zonder variabele invoer werkt hij prima.
Hoe is dit te fixen?
Ik krijg altijd de volgende error bij bind:
Quote:
atal error: Uncaught Error: Call to a member function bind_param() on boolean in
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public function getField($table,$comparefield,$field,$value,$spatie='',$teller='')
{
ini_set('display_errors',1);
error_reporting(E_ALL);
echo $value;
$sql = "select ".$field." from ".$table." where ".$comparefield." = ? ";
$sql = strval($sql);
// $stmt = $this->conn()->prepare('select naam from categorieen where id = ? ');
$stmt = $this->conn()->prepare($sql);
$stmt->bind_param("s", $value);
if (!$stmt->execute()) {
echo 'error executing statement: ' . $stmt->error;
$error = 1;
die();
}
$result = $stmt->get_result();
//$data = $result->fetch_all(MYSQLI_ASSOC);
$data= $result->fetch_assoc();
}
{
ini_set('display_errors',1);
error_reporting(E_ALL);
echo $value;
$sql = "select ".$field." from ".$table." where ".$comparefield." = ? ";
$sql = strval($sql);
// $stmt = $this->conn()->prepare('select naam from categorieen where id = ? ');
$stmt = $this->conn()->prepare($sql);
$stmt->bind_param("s", $value);
if (!$stmt->execute()) {
echo 'error executing statement: ' . $stmt->error;
$error = 1;
die();
}
$result = $stmt->get_result();
//$data = $result->fetch_all(MYSQLI_ASSOC);
$data= $result->fetch_assoc();
}
Als ik deze echo $sql
bijv "select naam from categorieen where id = ? "
Als ik die rechtstreeks zonder variabele invoer werkt hij prima.
Hoe is dit te fixen?
Met "s" in $stmt->bind_param("s", $value) bind je $value als een string terwijl het kennelijk een boolean is.
Wat is het datatype van de kolom in de database?
Wat is het datatype van de kolom in de database?
Gewijzigd op 21/06/2021 16:09:42 door Ward van der Put
Nu ben ik stiekem toch wel heel nieuwsgierig wat de bedoeling is van het $spatie='' argument ...
Hij word zo aangeroepen:
id is een integer in de databasestructuur, maar met deze doet hij hetzelfde,
terwijl dit ook een string is, en het idnummer 1 word ook als string meegegeven:
id is een integer in de databasestructuur, maar met deze doet hij hetzelfde,
terwijl dit ook een string is, en het idnummer 1 word ook als string meegegeven:
Ward van der Put op 21/06/2021 16:09:14:
Met "s" in $stmt->bind_param("s", $value) bind je $value als een string terwijl het kennelijk een boolean is.
Wat is het datatype van de kolom in de database?
Wat is het datatype van de kolom in de database?
Is het niet zo dat $stmt hier een boolean oplevert als gevolg van prepare() die false returnt?
Quote:
Nu ben ik stiekem toch wel heel nieuwsgierig wat de bedoeling is van het $spatie='' argument ...
Hahah. ja is een een test functie van mezelf.
Dit komt er daarna nog aan:
Zet na deze regel
$stmt = $this->conn()->prepare($sql);
eens
var_dump($stmt);exit;
Wat zie je dan in beeld?
Toevoeging op 21/06/2021 16:25:43:
>> Hahah. ja is een een test functie van mezelf.
Dat kun je beter niet in één-en-dezelfde functie zetten. Zorg ervoor dat een functie maar 1 taak heeft, en niet meerdere taken. Als je ergens spaties uit wil filteren, doe dat dan via een aparte functie. Die functie kun je dan ook weer op andere plekken gebruiken en zo hou je zaken overzichtelijk.
$stmt = $this->conn()->prepare($sql);
eens
var_dump($stmt);exit;
Wat zie je dan in beeld?
Toevoeging op 21/06/2021 16:25:43:
>> Hahah. ja is een een test functie van mezelf.
Dat kun je beter niet in één-en-dezelfde functie zetten. Zorg ervoor dat een functie maar 1 taak heeft, en niet meerdere taken. Als je ergens spaties uit wil filteren, doe dat dan via een aparte functie. Die functie kun je dan ook weer op andere plekken gebruiken en zo hou je zaken overzichtelijk.
Dus even ter verduidelijking, als ik dit doe, gaat het goed:
Maar de $field en $table vars gooien roet in het eten.
Toevoeging op 21/06/2021 16:27:51:
Maar de $field en $table vars gooien roet in het eten.
Toevoeging op 21/06/2021 16:27:51:
Quote:
Zet na deze regel
$stmt = $this->conn()->prepare($sql);
eens
var_dump($stmt);exit;
Wat zie je dan in beeld?
</quote>
Dan zie ik idd:
Toevoeging op 21/06/2021 16:31:48:
Met krijg ik dit
en dan var_dump($stmt);
$stmt = $this->conn()->prepare($sql);
eens
var_dump($stmt);exit;
Wat zie je dan in beeld?
</quote>
Dan zie ik idd:
Quote:
D:\mapje\class\class.php:3829:boolean false
Toevoeging op 21/06/2021 16:31:48:
Met krijg ik dit
Code (php)
1
2
2
$stmt = $this->conn()->prepare('select naam from categorieen where id = ? ');
//$stmt = $this->conn()->prepare($sql);
//$stmt = $this->conn()->prepare($sql);
en dan var_dump($stmt);
Quote:
D:\mapje\class\class.php:3829
object(mysqli_stmt)[3]
public 'affected_rows' => int 0
public 'insert_id' => int 0
public 'num_rows' => int 0
public 'param_count' => int 1
public 'field_count' => int 1
public 'errno' => int 0
public 'error' => string '' (length=0)
public 'error_list' =>
array (size=0)
empty
public 'sqlstate' => string '00000' (length=5)
public 'id' => int 1
object(mysqli_stmt)[3]
public 'affected_rows' => int 0
public 'insert_id' => int 0
public 'num_rows' => int 0
public 'param_count' => int 1
public 'field_count' => int 1
public 'errno' => int 0
public 'error' => string '' (length=0)
public 'error_list' =>
array (size=0)
empty
public 'sqlstate' => string '00000' (length=5)
public 'id' => int 1
Aha ... oké, dan gaat er dus iets fout in je prepare statement.
Werkt je connectie wel?
var_dump($this->conn);exit;
Werkt je connectie wel?
var_dump($this->conn);exit;
Ja zoals ik al aangaf werkt het prima als ik de vars $field en $table niet in de query zet.
Wellicht zit er een foutje in de opbouw van je $sql.
Even testen:
var_dump($sql);exit;
Even testen:
var_dump($sql);exit;
Dat geeft:
var_dump($sql);exit;
D:\mapje\class\class.php:3825:string 'select naam from category where id = ? ' (length=39)
var_dump($sql);exit;
D:\mapje\class\class.php:3825:string 'select naam from category where id = ? ' (length=39)
categorieen versus category ;-)
Geef me een pistool. ik kan mezelf voor mijn kop schieten.... hoe stom kan ik zijn zeg!!!
mijn god ....bedankt! dat was het
mijn god ....bedankt! dat was het
Graag gedaan ;-)
Beetje mosterd na de maaltijd, maar wat is de bedoeling van
?
?




