Data kemas kini pertanyaan PHP
P粉938936304
P粉938936304 2024-04-01 13:41:23
0
1
501

Ini adalah ralat yang saya terima:

KEMASKINI SET SOALAN situacao='Concluido' WHERE id=? sintaks yang betul untuk digunakan adalah dalam baris 1

Saya mencuba banyak perkara dan akhirnya saya hanya boleh menggunakan kod di bawah, terima kasih semua

P粉938936304
P粉938936304

membalas semua(1)
P粉132730839

Anda hampir dengan jawapan anda. Seperti yang ditunjukkan oleh Slava Rozhnev, kod anda terbuka kepada suntikan SQL sekalipun. Dalam soalan anda, anda menggunakan ruang letak dalam pertanyaan anda. Apabila anda menyediakan kenyataan, anda memberitahu PDO: 无论我放入其中的内容,都不要执行它,它只是数据. Apabila bersedia, anda boleh mengikat nilai pada pemegang tempat. Ini boleh dilakukan melalui bindValue atau bindParam atau pun menggunakan execute()

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $link->prepare($sql);
    $stmt->bindValue(1, $id);

    $stmt->execute();

    header("Location:verTodos.php");
} catch (PDOException $e) {

    echo $sql . "
" . $e->getMessage(); } $link = null; ?>

OK$stmt->bindValue(1, $id)读取当前值并用它替换占位符。如果您要使用循环,并且 $id 会不断变化,您可以使用 $stmt-bindParam(1, $id) 这会读取 $id 执行查询时的变量。另一种选择是删除 bindValue 调用并让 execute 绑定值。这可以通过将值数组作为参数添加到 execute 调用来完成。在您的情况下,这将是 $stmt->execute([$id]). Saya secara peribadi lebih suka melakukannya kerana ia lebih bersih daripada menambah sekumpulan panggilan bindValue sebelum melakukannya.

Juga ambil perhatian bahawa saya mempunyai $sql 变量的赋值移至 try-catch 块之外。这是因为您想在 catch 中使用变量,如果 PDO 的构造函数抛出 PDOException(在行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $用户名, $密码);

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan