찾다

 >  Q&A  >  본문

PHP 쿼리 업데이트 데이터

다음과 같은 오류가 발생합니다.

UPDATE QUESTION SET situacao='Concluido' WHERE id=? SQLSTATE[42000]: 구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 대한 설명서를 확인하여 "?" 사용할 올바른 구문은 1번째 줄에 있습니다

많은 것을 시도했지만 결국 아래 코드만 사용할 수 있었습니다. 모두 감사합니다

P粉938936304P粉938936304237일 전471

모든 응답(1)나는 대답할 것이다

  • P粉132730839

    P粉1327308392024-04-02 12:07:59

    답에 거의 도달했습니다. Slava Rozhnev가 지적했듯이 귀하의 코드는 SQL 주입에 열려 있습니다. 귀하의 질문에서는 쿼리에 자리 표시자를 사용하고 있습니다. 명령문을 준비할 때 PDO에게 无论我放入其中的内容,都不要执行它,它只是数据라고 말합니다. 준비가 되면 값을 자리 표시자에 바인딩할 수 있습니다. 이는 bindValue 또는 bindParam을 사용하거나 execute()

    를 사용하여 수행할 수 있습니다. 으아아아

    알았어$stmt->bindValue(1, $id)读取当前值并用它替换占位符。如果您要使用循环,并且 $id 会不断变化,您可以使用 $stmt-bindParam(1, $id) 这会读取 < code>$id 执行查询时的变量。另一种选择是删除 bindValue 调用并让 execute 绑定值。这可以通过将值数组作为参数添加到 execute 调用来完成。在您的情况下,这将是 $stmt->execute([$id]). 저는 개인적으로 이 방법을 선호합니다. 왜냐하면 이 방법을 수행하기 전에 여러 개의 BindValue 호출을 추가하는 것보다 훨씬 깔끔하기 때문입니다.

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

    회신하다
    0
  • 취소회신하다