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

Php 这是准备和执行bind_param的正确方法吗,php,mysqli,Php,Mysqli,我正在尝试插入数据库,但总是收到回音: “门票niet aangemaakt” 我可以在变量之间使用“?”吗 如果是,有人能看到一些错误,否则我知道有一个拼写错误 变量 <?php //this works fine $ophaalKlantQuery = "SELECT * FROM klant WHERE klantNaam='$naam'"; $result = $connectie->query($ophaalKlantQuery); if (mysqli_n

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

“门票niet aangemaakt”

我可以在变量之间使用“?”吗

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

<?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';}
?>

有不同的语法,但是现在执行SQL请求的好方法是将SQL与变量传递分开。决不应在SQL请求字符串中直接连接值

有关于这方面的文档,但总体来说,问题是用bind方法自动安全地替换字符串中的值

语法示例:

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

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

对不起,请澄清,为什么要用“?”代替值?是让它们空白吗?或者你想把一个变量放到那个值上?我正在绑定?带有bind_参数的值您需要向我们显示真正的错误是什么。您应该使用
echo“Error:”,而不是
else{echo'ticket niet aangemaakt';}
。mysqli_错误($connectie)
并告诉我们它是什么,然后使用php的错误报告。如果
占位符的数量与您尝试绑定的占位符匹配,并且是正确的
i
s
占位符,那么应该不会有问题。但是,您应该使用绑定它们,而不仅仅是一些。我只是看不到它们是在哪里定义的。
$probleem、$trefwoorden、$prioriteit、$streefdatam、$scategorie、$binnenkomstT、$merktype、$besturingsysteem
和其他变量。您的问题不清楚,因此投票决定结束。为什么选择命名占位符?这些都是为PDO设计的,而不是他们正在使用的mysqli。在
INSERT
中没有
WHERE
子句。这也是^-我看不出混合变量和占位符的问题@卡达,这里没有人批评你,只是说明/询问你为什么包括命名占位符