Tendo problemas inserir e tabelas de atualização em um banco de dados com instruções preparadas

StackOverflow https://stackoverflow.com/questions/652960

  •  19-08-2019
  •  | 
  •  

Pergunta

Muito novo para PHP5 e tem alguns problemas ainda. Eu descobri como selecionar com declarações preparadas agora a tentar inserir / atualizar meu código é a seguinte

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssiidd', $name, $image, $descrip, 0, 0, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

O erro que eu estou recebendo é

Erro fatal: Não é possível passar parâmetros 4 por html referência / aulas / mySQL.php na linha 43

Qualquer ajuda / referências seria apreciada. Obrigado.


Todo mundo está mencionando usando DOP, que vocês têm algum tutorial bom ou exemplos de isso por favor?

Foi útil?

Solução 2

eu mudei para

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssdd', $name, $image, $descrip, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

Basicamente eu mudei onde ele estava lendo o ?? para o número inteiro de 0 na consulta eu não vinculá-lo.

Outras dicas

não é $descrip esse é o problema; é os 0s (parâmetros 4 e 5). a solução é passar variáveis ??em vez de números inteiros:

 `$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";`

    $pat_doctor = 0;
    $pat_resident = 0;

    if($stmt = $this->conn->prepare($query)){
            $stmt->bind_param('sssiidd', $name, $image, $descrip, $pat_doctor, $pat_resident, date("Ymd"), date("Ymd"));`

evidentemente mysqli_bind_param quer que os seus argumentos como referências assim que olha para onde eles estão armazenados na memória ao invés de copiar seus valores. isso faz sentido como algumas das coisas que você gostaria de vincular a instrução SQL, tais como a imagem, são provavelmente suficientemente grande que você preferiria não ter cópias excesso correndo ao redor. literais, corda ou de outra forma, não são acessíveis para referência. ver: http://us.php.net/references

Eu não sugiro difícil codificar os 0s na instrução SQL, como desnecessariamente confunde seu código.

deixe-me sugerir DOP, pelo caminho. sua sintaxe é muito mais saudável.

Não use bind_param - É uma interface muito intuitiva e propenso a erros, que é principalmente um legado do C-api subjacente. Use bind_value ou ainda melhor - passar uma matriz de valores como um argumento PDOStatement->execute . Por exemplo:.

$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if ($stmt = $this->conn->prepare($query)) {
  $stmt->execute(array($name, $image, $descrip, date("Ymd"), date("Ymd")));
  die();
} else {
  die($this->conn->error);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top