这是准备和执行bind_param的正确方法吗?

时间:2017-01-13 21:52:32

标签: php mysqli

我正在尝试插入数据库,但我总是得到回声:

  

' ticket niet aangemaakt'

我可以使用'?' inbetween变量?

如果是,有人可以看到一些错误,否则我知道有拼写错误 变量。

<?php
//this works fine
$ophaalKlantQuery = "SELECT * FROM klant WHERE klantNaam='$naam'";
    $result = $connectie->query($ophaalKlantQuery);
    if (mysqli_num_rows($result) == 0) {
        echo "klant niet gevonden";
    }
    while ($row = $result->fetch_assoc()) {
        if ($row['klantNaam'] === $naam) {
            echo $row['klantNaam'];
            $klantID = $row['klantId'];
        }
    }
// everything below doesnt insert
$insertticket = $connectie->prepare("INSERT INTO ticket (ticketId, inBehandeling, probleem, trefwoorden, prioriteit, aantalXterug,
                        terugstuurLock, lijnNr, datumAanmaak, nogBellen, log, streefdatum, redenTeLaat, klantTevreden, ftsAccountNr, aangewAccountNr, klantId, subCategorieId, 
                        binnenkomstId, vVLaptopTypeId, besturingssysteemId)
                        VALUES ('','$inbehandeling',?,?,?, '$aantalXterug','$terugstuurLock','$lijnNr','$datumAanmaak','$check','$log',?,'$redentelaat','$klanttevreden','$fstAccountNr',
                        '$aangewAccountNr','$klantID',?,?,?,?)");
            if ($insertticket) {
                $insertticket->bind_param('ssisiiii', $probleem, $trefwoorden, $prioriteit, $streefdatum, $scategorie, $binnenkomstT, $merktype, $besturingsysteem);
                if ($insertticket->execute()) {
                    echo 'ticket aangemaakt';
                    //header("Refresh:5; url=../index.php", true, 303);
                }
            }else {echo 'ticket niet aangemaakt';}
?>

1 个答案:

答案 0 :(得分:-1)

有不同的语法,但现在做SQL请求的好方法是将SQL与传递的变量分开。您永远不应该直接在SQL请求字符串中连接一个值。

有关于此的文档,但总的来说,用字符串中的值替换将由bind方法自动安全地替换的值。

语法示例:

'INSERT INTO test (name, age) VALUES (?, ?)'

'INSERT INTO test (name, age) VALUES (:name, :age)'