TransWikia.com

Insertar variables PHP en SQL a mi base de datos

Stack Overflow en español Asked by Adiel on January 28, 2021

Tengo un problema con crear un registro de usuario, lo que trato de hace es que desde los inputs que cree en html se almacene la información en php cree la variable con la información obtenida del input y utilizar esa variable para crear un nuevo usuario en mi Base de Datos con SQL (ya saben lo típico).

Pero al momento de hacer el registro de dice este error

Fatal error: Uncaught Error: Call to a member function prepare() on null on line 15.

Ya verifique pero parece que algo estoy haciendo mal espero haberles brindado todo la información necesaria a continuación el código:

<?php
session_start();
 
// Datos para conectar a la base de datos.
$nombreServidor = "*********";
$nombreUsuario = "******";
$passwordBaseDeDatos = "*********";
$nombreBaseDeDatos = "******";

// Crear conexión con la base de datos.
$conn = new mysqli($nombreServidor, $nombreUsuario, $passwordBaseDeDatos, $nombreBaseDeDatos);


// registrar usuario 
$stmt = $con->prepare("INSERT INTO usuarios (correo,password,nombre,apellido_p,apellido_m,colonia,calle,numero,CP,telefono) VALUES (:email,:contra,:nombre,:Apaterno,:Amaterno,:colonia,:calle,:numero,:CP,:tel)");
//$stmt->bind_param(array($email,$contra,$nombre,$Apaterno,$Amaterno,$colonia,$calle,$numero,$CP,$tel));

$stmt->bindParam(':email', $email);
$stmt->bindParam(':contra', $contra);
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':Apaterno', $Apaterno);
$stmt->bindParam(':contra', $Amaterno);
$stmt->bindParam(':Amaterno', $colonia);
$stmt->bindParam(':calle', $calle);
$stmt->bindParam(':numero', $numero);
$stmt->bindParam(':CP', $CP);
$stmt->bindParam(':tel', $tel);



$email = $_POST['email'];
$contra = $_POST['psw'];
$nombre = $_POST['name'];
$Apaterno = $_POST['apaterno'];
$Amaterno = $_POST['amaterno'];
$colonia = $_POST['colonia'];
$calle = $_POST['calle'];
$numero = $_POST['numero'];
$CP = $_POST['codigop'];
$tel = $_POST['telefono'];
$stmt->execute();




/*$sql = "INSERT INTO usuarios (correo,password,nombre,apellido_p,apellido_m,colonia,calle,numero,CP,telefono) VALUES ('$_POST[email]','$_POST[psw]','$_POST[name]','$_POST[apaterno]','$_POST[amaterno]','$_POST[colonia]','$_POST[calle]','$_POST[numero]','$_POST[codigop]','$_POST[telefono]')";
if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
} else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
*/

?>

2 Answers

Si estás construyendo tu conexión a través de una instancia de mysqli, entonces:

  • Usar el método bind_param en lugar de bindParam que es de la clase PDO
  • El método bind_param recibe
    • Un string con los tipos de datos que espera en cada posición
    • Posterior podemos indicar separadas por coma , cada una de las variables
  • Para el caso del método prepare haciendo uso de mysqli usaremos como marcadores el símbolo de ? en lugar del marcador de parámetros

Prueba tu código así:

<?php 

// Datos para conectar a la base de datos.
$passwordBaseDeDatos = "*********";
$nombreBaseDeDatos   = "******";
$nombreServidor      = "*********";
$nombreUsuario       = "******";

// Crear conexión con la base de datos.
$conn = new mysqli($nombreServidor, $nombreUsuario, $passwordBaseDeDatos, $nombreBaseDeDatos);

$Apaterno = $_POST['apaterno'];
$Amaterno = $_POST['amaterno'];
$colonia  = $_POST['colonia'];
$contra   = $_POST['psw'];
$nombre   = $_POST['name'];
$numero   = $_POST['numero'];
$email    = $_POST['email'];
$calle    = $_POST['calle'];
$tel      = $_POST['telefono'];
$CP       = $_POST['codigop'];

    
// registrar usuario 
if ($stmt = $conn->prepare("INSERT INTO usuarios (
                                                    correo,
                                                    password,
                                                    nombre,
                                                    apellido_p,
                                                    apellido_m,
                                                    colonia,
                                                    calle,
                                                    numero,
                                                    CP,
                                                    telefono
                                                ) 
                            VALUES (?,?,?,?,?,?,?,?,?,?)
    ")) {
    
    $stmt->bind_param('sssssssiis', $email, $contra, $nombre, $Apaterno, $Amaterno, $colonia, $calle, $numero, $CP, $tel);

    $stmt->execute();
} else {
    echo $conn->error;
}

Answered by BetaM on January 28, 2021

<?php
 
// Datos para conectar a la base de datos.
$nombreServidor = 'mysql:host=localhost;dbname=nombre_BD';
$nombreUsuario = 'nombre_usuario';
$passwordBaseDeDatos = 'constrasena';

// Crear conexión con la base de datos.
$conn = new PDO($nombreServidor, $nombreUsuario, $passwordBaseDeDatos);

$email = $_GET['email'];
$contra = $_GET['psw'];
$nombre = $_GET['name'];
$Apaterno = $_GET['apaterno'];
$Amaterno = $_GET['amaterno'];
$colonia = $_GET['colonia'];
$calle = $_GET['calle'];
$numero = $_GET['numero'];
$CP = $_GET['codigo'];
$tel = $_GET['telefono'];

$sql = 'INSERT INTO `usuarios`(`correo`, `password`, `nombre`, `apellido_p`, `apellido_m`, `colonia`, `calle`, `numero`, `cp`, `telefono`) 
        VALUES (:email,:contra,:nombre,:Apaterno,:Amaterno,:colonia,:calle,:numero,:CP,:tel)';

// registrar usuario 
$stmt = $conn->prepare($sql);
$stmt->bindParam(":email", $email);
$stmt->bindParam(":contra", $contra);
$stmt->bindParam(":nombre", $nombre);
$stmt->bindParam(":Apaterno", $Apaterno);
$stmt->bindParam(":Amaterno", $Amaterno);
$stmt->bindParam(":colonia", $colonia);
$stmt->bindParam(":calle", $calle);
$stmt->bindParam(":numero", $numero);
$stmt->bindParam(":CP", $CP);
$stmt->bindParam(":tel", $tel);
$stmt->execute();

?>

Answered by Kevin Carrillo on January 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP