Foros del Web » Programando para Internet » PHP »

Hacer consulta Mysqli

Estas en el tema de Hacer consulta Mysqli en el foro de PHP en Foros del Web. Buenas gente de forosdelweb, el dia de hoy tengo un problemita con un metodo nuevo que estoy implementando, me he dado cuenta que mi sitio ...
  #1 (permalink)  
Antiguo 07/10/2016, 08:17
 
Fecha de Ingreso: julio-2014
Ubicación: Montevideo
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 2
Hacer consulta Mysqli

Buenas gente de forosdelweb, el dia de hoy tengo un problemita con un metodo nuevo que estoy implementando, me he dado cuenta que mi sitio era algo inseguro y que yo me habia quedado en la prehistoria de la programacion php por lo tanto inicie un nuevo aprendizaje y aprendi algo sobre mysqli, ahora estoy pasando todas mis consultas mysql normales a mysql para evitar ataques sql inyection. La cosa es que en mi primer intento tengo un error y no logro saber porque, al parecer el codigo esta como debe estar, pero lo dejo a su vista mas experimentada.

Codigo:

Código PHP:
$sentencia $con->prepare("SELECT* FROM cuenta WHERE nombre= '?' or email= '?' and pass= '?'");
                        
$sentencia->bind_param($sentencia"sss"$nombre_str$email_str$pass_str);
                        
$sentencia->execute(); 
Error:
Código:
PHP Fatal error:  Cannot pass parameter 2 by reference in xxxx
__________________
¿Necesitas Hosting Web? - [JSFIDDLE="www.intechservers.com/hosting"]Intech Servers Hosting[/JSFIDDLE]
¿Necesitas Sitio Web? - [JSFIDDLE="www.intechservers.com/web"]Intech Servers Web[/JSFIDDLE]
  #2 (permalink)  
Antiguo 07/10/2016, 09:10
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Hacer consulta Mysqli

Código PHP:


<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* comprobar la conexión */
if ($mysqli->connect_errno) {
    
printf("Falló la conexión: %s\n"$mysqli->connect_error);
    exit();
}

/* Crear una tabla que no devuelve un conjunto de resultados */
if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
    
printf("Se creó con éxtio la tabla myCity.\n");
}

/* Consultas de selección que devuelven un conjunto de resultados */
if ($resultado $mysqli->query("SELECT Name FROM City LIMIT 10")) {
    
printf("La selección devolvió %d filas.\n"$resultado->num_rows);

    
/* liberar el conjunto de resultados */
    
$resultado->close();
}

/* Si se ha de recuperar una gran cantidad de datos se emplea MYSQLI_USE_RESULT */
if ($resultado $mysqli->query("SELECT * FROM City"MYSQLI_USE_RESULT)) {

    
/* Observar que no se puede ejecutar ninguna función que interactue con el
       servidor hasta que el conjunto de resultados se haya cerrado. Todas las llamadas devolverán un
       error 'out of sync' */
    
if (!$mysqli->query("SET @a:='esto no funcionará'")) {
        
printf("Error: %s\n"$mysqli->error);
    }
    
$resultado->close();
}

$mysqli->close();
?>
  #3 (permalink)  
Antiguo 07/10/2016, 13:01
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Hacer consulta Mysqli

El error que te da no creo que este en el código que muestras que a simple vista parece correcto.

Cita:
PHP Fatal error: Cannot pass parameter 2 by reference in xxxx
Esto indica que no puedes pasar 2 parámetros por referencia, no se si utilizas referencias(&$miVariable) pero si es así revisas. Ten en cuenta que php intenta indicarte la línea del error pero no siempre es la línea exacta, puede estar en alguna de las anteriores o posteriores
__________________
Unset($vida['malRollo']);
  #4 (permalink)  
Antiguo 07/10/2016, 15:30
 
Fecha de Ingreso: julio-2014
Ubicación: Montevideo
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: Hacer consulta Mysqli

Si, puede que tengas razon pero no encuentro el error. Te paso todo el codigo por las dudas

Código PHP:
include "conexion.php";

$sqlc"select * from web_config";
            
$queryc $con->query($sqlc);
            while (
$rc=$queryc->fetch_array()) {
                
$login=$rc["login"];
                break;
            }
if(!empty(
$_POST)){
    if(isset(
$_POST["username"]) &&isset($_POST["password"])){
        if(
$_POST["username"]!=""&&$_POST["password"]!=""){
            
$nombre_str $_POST["username"];
$email_str $_POST["username"];
$pass_str $_POST["password"];
    
    
            
$user_id=null;

            
$sentencia $con->prepare("SELECT* FROM cuenta WHERE nombre= '?' or email= '?' and pass= '?'");
                        
$sentencia->bind_param($sentencia,"sss"$nombre_str$email_str$pass_str);
                        
$sentencia->execute();

            while (
$r=$sentencia->fetch_array()) {
                
$user_id=$r["id"];
                break;
            }


            if(
$user_id==null){
                print 
"<script>alert(\"Acceso invalido.\");window.location='../login.php';</script>"; echo $con->error;
            }
if(
$login==0){
                print 
"<script>alert(\"El ingreso fue desactivado por un administrador.\");window.location='../login.php';</script>";
            }else{
            
session_start();  

$_SESSION["user_id"]=$user_id;
$_SESSION["nombre"]=$r["nombre"];
$_SESSION["nivel"]=$r["nivel"];
$_SESSION["skin"]=$r["skin"];
 
$_SESSION["adminlvl"]=$r["adminlvl"];

$nombre_carpeta "/home/newclanrp/www/mp3/".$user_id.""

if (!
file_exists($nombre_carpeta)) {

mkdir($nombre_carpeta0777);

}

                print 
"<script>window.location='/cuenta';</script>";            
            }
        }
    }

__________________
¿Necesitas Hosting Web? - [JSFIDDLE="www.intechservers.com/hosting"]Intech Servers Hosting[/JSFIDDLE]
¿Necesitas Sitio Web? - [JSFIDDLE="www.intechservers.com/web"]Intech Servers Web[/JSFIDDLE]
  #5 (permalink)  
Antiguo 08/10/2016, 04:51
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Hacer consulta Mysqli

Cambia los && del if por AND , y en cualquier caso deja espacios entre el operador y sus premisas.

Código PHP:
Ver original
  1. if(isset($_POST["username"]) &&isset($_POST["password"])){
  2.         if($_POST["username"]!=""&&$_POST["password"]!=""){

También puedes eliminar las comillas de la sentencia sql, ya que al utilizar sentencias preparadas no son necesarias.
Por lo que quedaría asi:

Código PHP:
Ver original
  1. $sentencia = $con->prepare("SELECT* FROM cuenta WHERE nombre= ? or email= ? and pass= ? ");
  2.                         $sentencia->bind_param($sentencia,"sss", $nombre_str, $email_str, $pass_str);
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 08/10/2016 a las 04:58
  #6 (permalink)  
Antiguo 09/10/2016, 08:07
 
Fecha de Ingreso: julio-2014
Ubicación: Montevideo
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: Hacer consulta Mysqli

Sigue sin funcionar :( ya intente quitar las comillas y nada.

Este es el codigo completo:

Código PHP:
<?php
include "conexion.php";

$sqlc"select * from web_config";
            
$queryc $con->query($sqlc);
            while (
$rc=$queryc->fetch_array()) {
                
$login=$rc["login"];
                break;
            }
if(!empty(
$_POST)){
    if(isset(
$_POST["username"]) &&isset($_POST["password"])){
        if(
$_POST["username"]!=""&&$_POST["password"]!=""){
            
$nombre_str $_POST["username"];
$email_str $_POST["username"];
$pass_str $_POST["password"];
    
    
            
$user_id=null;

            
$sentencia $con->prepare("SELECT* FROM cuenta WHERE nombre= ? or email= ? and pass= ?");
                        
$sentencia->bind_param($sentencia"sss"$nombre_str$email_str$pass_str);
                        
$sentencia->execute();

            while (
$r=$sentencia->fetch_array()) {
                
$user_id=$r["id"];
                break;
            }


            if(
$user_id==null){
                print 
"<script>alert(\"Acceso invalido.\");window.location='../login.php';</script>"; echo $con->error;
            }
if(
$login==0){
                print 
"<script>alert(\"El ingreso fue desactivado por un administrador.\");window.location='../login.php';</script>";
            }else{
            
session_start();  

$_SESSION["user_id"]=$user_id;
$_SESSION["nombre"]=$r["nombre"];
$_SESSION["nivel"]=$r["nivel"];
$_SESSION["skin"]=$r["skin"];
 
$_SESSION["adminlvl"]=$r["adminlvl"];

$nombre_carpeta "/home/newclanrp/www/mp3/".$user_id.""

if (!
file_exists($nombre_carpeta)) {

mkdir($nombre_carpeta0777);

}

                print 
"<script>window.location='/cuenta';</script>";            
            }
        }
    }
}
Conexion.php

Código PHP:
<?php
$host
="localhost";
$user="xxx";
$password="xxx";
$db="xxx";
$con = new mysqli($host,$user,$password,$db);

?>
__________________
¿Necesitas Hosting Web? - [JSFIDDLE="www.intechservers.com/hosting"]Intech Servers Hosting[/JSFIDDLE]
¿Necesitas Sitio Web? - [JSFIDDLE="www.intechservers.com/web"]Intech Servers Web[/JSFIDDLE]
  #7 (permalink)  
Antiguo 09/10/2016, 09:10
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Hacer consulta Mysqli

No olvides comentar lo que escribes. }//este if pertece a ....

Código PHP:
<?php
$host
="localhost";
$user="root";
$password="";
$db="my_database";
$con = new mysqli($host,$user,$password,$db);

$sqlc"select * from eljuegodelavida";
            
$queryc $con->query($sqlc);
            while (
$rc=$queryc->fetch_array()) {
                
$login=$rc[0];

                echo 
"REsultados 1 ...";

            }


$nombre_str $_POST["username"];
$email_str $_POST["username"];
$pass_str $_POST["password"];

  
// WHERE nombre='?' or email= '?' and pass= '?'

$sqlc2=" select * from eljuegodelavida ";

            
$sentencia $con->query($sqlc2);

            while (
$r=$sentencia->fetch_array()) {
                
$user_id=$r["id"];
                echo 
"REsultados 2 ...";


                
$trueTRUE;
            }
//while

if($true !== FALSE ){
session_start();

$_SESSION["user_id"]=$user_id;
$_SESSION["nombre"]=$r["nombre"];
$_SESSION["nivel"]=$r["nivel"];
$_SESSION["skin"]=$r["skin"];
 
$_SESSION["adminlvl"]=$r["adminlvl"];

$nombre_carpeta "/home/newclanrp/www/mp3/".$user_id."";

if (!
file_exists($nombre_carpeta)) {

@
mkdir($nombre_carpeta0777);

}


          }
//if true
  #8 (permalink)  
Antiguo 09/10/2016, 09:14
 
Fecha de Ingreso: julio-2014
Ubicación: Montevideo
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: Hacer consulta Mysqli

Men agradezco tu ayuda pero no tiene nada que ver con mi problema, yo ya se hacer la consulta con query normal, pero eso es inseguro y por eso me recomendaron hacerla con mysqli, consulte como se hacia por internet y cuando aprendi bueno, lo hice pero tengo ese error y no encuentro el porque. Necesito que funcione en mysqli, con query ya se que funciona porque lo tenia asi antes. Por cierto lo de comentar es opcional, a mi gusto me parece desprolijo y molesto andar comentando todo por eso no lo hago. Saludos
__________________
¿Necesitas Hosting Web? - [JSFIDDLE="www.intechservers.com/hosting"]Intech Servers Hosting[/JSFIDDLE]
¿Necesitas Sitio Web? - [JSFIDDLE="www.intechservers.com/web"]Intech Servers Web[/JSFIDDLE]
  #9 (permalink)  
Antiguo 10/10/2016, 01:31
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Hacer consulta Mysqli

Quitaste las comillas pero no los ET del condicional, que es donde esta tu problema, ya que el símbolo ET se utiliza para referenciar una variable. Además no dejas espacios entre el operador y &&$variable es como hacer una doble referencia, cuando debería ser AND $variable para no llevar a errores.

Donde tienes
Código PHP:
Ver original
  1. if(isset($_POST["username"]) &&isset($_POST["password"])){
  2.         if($_POST["username"]!=""&&$_POST["password"]!=""){

Debería quedar más o menos así
Código PHP:
if(isset($_POST["username"]) AND isset($_POST["password"])){ 
        if(
$_POST["username"]!="" AND $_POST["password"]!=""){ 
Postdata: pienso igual un exceso de comentarios, termina dificultando la lectura del código.
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 10/10/2016 a las 01:37

Etiquetas: mysql, mysqli, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:48.