Introdução às instruções preparadas no MySQL
As instruções preparadas são uma ferramenta essencial para escrever consultas SQL seguras e eficientes. Neste artigo, exploraremos como usar instruções preparadas com mysqli, a extensão MySQLi em PHP.
Erro de sintaxe: execução sem objeto
O erro que você encontra , "Erro fatal: chamada para uma função de membro execute() em um não objeto", normalmente indica que a variável $stmt não foi inicializada corretamente ou é um objeto. Veja como corrigi-lo:
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
Certifique-se de ter um conexão válida com o banco de dados antes de continuar.
Parâmetros de vinculação
As instruções preparadas usam marcadores de parâmetro (por exemplo,?) para representar valores de entrada. Esses valores precisam ser vinculados às variáveis PHP antes de executar a instrução. Aqui está um exemplo:
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
Neste exemplo, vinculamos o parâmetro name como uma string ('s') e o parâmetro idade como um número inteiro ('i ').
Executando a instrução
Depois que os parâmetros estiverem vinculados, você pode executar o preparado instrução:
$stmt->execute();
Tratamento de erros
As instruções preparadas fornecem melhor tratamento de erros do que consultas SQL diretas. Use o método mysqli_stmt::error para recuperar mensagens de erro:
if ($stmt->error) { die("Error: " . $stmt->error); }
Exemplo completo
Aqui está um exemplo completo de inserção, seleção e tratamento de erros:
// Establish connection $mysqli = new mysqli("localhost", "root", "root", "test"); // Prepare and bind parameters $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->bind_param('si', $name, $age); // Insert multiple rows $name = 'one'; $age = 1; $stmt->execute(); $name = 'two'; $age = 2; $stmt->execute(); // Prepare and execute select statement $stmt = $mysqli->prepare("SELECT * FROM users"); $stmt->execute(); // Bind result $result = $stmt->get_result(); // Process results while ($row = $result->fetch_assoc()) { echo $row['name'] . ", " . $row['age'] . "
\n"; } // Handle errors if ($stmt->error) { die("Error: " . $stmt->error); }
Usando instruções preparadas, você pode evitar ataques de injeção de SQL e escrever consultas SQL mais robustas e eficientes.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3