UPDATE QUESTION SET situacao='Concluido' WHERE id=? SQLSTATE[42000]: 구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 대한 설명서를 확인하여 "?" 사용할 올바른 구문은 1번째 줄에 있습니다
답에 거의 도달했습니다. Slava Rozhnev가 지적했듯이 귀하의 코드는 SQL 주입에 열려 있습니다. 귀하의 질문에서는 쿼리에 자리 표시자를 사용하고 있습니다. 명령문을 준비할 때 PDO에게 无论我放入其中的内容,都不要执行它,它只是数据라고 말합니다. 준비가 되면 값을 자리 표시자에 바인딩할 수 있습니다. 이는 bindValue 또는 bindParam을 사용하거나 execute()
를 사용하여 수행할 수 있습니다.
으아아아
알았어$stmt->bindValue(1, $id)读取当前值并用它替换占位符。如果您要使用循环,并且 $id 会不断变化,您可以使用 $stmt-bindParam(1, $id) 这会读取 $id 执行查询时的变量。另一种选择是删除 bindValue 调用并让 execute 绑定值。这可以通过将值数组作为参数添加到 execute 调用来完成。在您的情况下,这将是 $stmt->execute([$id]). 저는 개인적으로 이 방법을 선호합니다. 왜냐하면 이 방법을 수행하기 전에 여러 개의 BindValue 호출을 추가하는 것보다 훨씬 깔끔하기 때문입니다.
답에 거의 도달했습니다. Slava Rozhnev가 지적했듯이 귀하의 코드는 SQL 주입에 열려 있습니다. 귀하의 질문에서는 쿼리에 자리 표시자를 사용하고 있습니다. 명령문을 준비할 때 PDO에게
를 사용하여 수행할 수 있습니다. 으아아아无论我放入其中的内容,都不要执行它,它只是数据
라고 말합니다. 준비가 되면 값을 자리 표시자에 바인딩할 수 있습니다. 이는 bindValue 또는 bindParam을 사용하거나 execute()알았어
$stmt->bindValue(1, $id)
读取当前值并用它替换占位符。如果您要使用循环,并且$id
会不断变化,您可以使用$stmt-bindParam(1, $id)
这会读取 $id 执行查询时的变量。另一种选择是删除bindValue
调用并让execute
绑定值。这可以通过将值数组作为参数添加到execute
调用来完成。在您的情况下,这将是$stmt->execute([$id])
. 저는 개인적으로 이 방법을 선호합니다. 왜냐하면 이 방법을 수행하기 전에 여러 개의 BindValue 호출을 추가하는 것보다 훨씬 깔끔하기 때문입니다.저도
$sql
变量的赋值移至 try-catch 块之外。这是因为您想在 catch 中使用变量,如果 PDO 的构造函数抛出 PDOException(在行$link = new PDO("mysql:host=$servername;dbname= $dbname", $用户名, $密码);