Spanish Deprecated conectando con MySQL

Espinosa4

Active Member
Licensed User
Longtime User
Hola a todos,

¿me podríais echar un cable por favor?

Resulta que estoy intentando conectar desde mi programa a una base de datos alojada en una web gratuita y me aparece el error... Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO

Yo no sé lo que tengo que hacer. Tengo que modificar mi php? Tengo que tocar sólo para la conexión pero dejo la parte de que devuelva json

B4X:
<?php

$databasehost = "host";
$databasename = "libros";
$databaseusername ="root";
$databasepassword = "1234";


$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_set_charset("utf8");
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input");

$sth = mysql_query($query);


if (mysql_errno()) {
header("HTTP/1.1 500 Internal Server Error");
echo $query.'\n';
echo mysql_error();
}
else
{
$rows = array();
while($r = mysql_fetch_assoc($sth)) {

$rows[] = $r;
}


print json_encode($rows);
}
?>

Muchas gracias
Saludos
 

cuellar

Member
Licensed User
Longtime User
Bueno, el mismo mensaje de advertencia te está dando la respuesta. Modifica tu php y usa MySqli, no tienes que cambiar nada más.
 

Espinosa4

Active Member
Licensed User
Longtime User
Bueno, el mismo mensaje de advertencia te está dando la respuesta. Modifica tu php y usa MySqli, no tienes que cambiar nada más.
Hola cuellar!

Muchas graciasss. Voy a probar a ver que tal.
Un saludo!
 

Espinosa4

Active Member
Licensed User
Longtime User
Bueno, el mismo mensaje de advertencia te está dando la respuesta. Modifica tu php y usa MySqli, no tienes que cambiar nada más.
Hola cuellar, no consigo que conecte. Las funciones cambian y unas tienen más parámetros otras menos pero como no sé lo que estoy haciendo pues la voy liando más y más. Todos son mensajes de que expected 2 parameters, etc...

Saludos
 

Espinosa4

Active Member
Licensed User
Longtime User
He retocado el archivo PHP.

Ahora obtengo los siguientes mensajes

Warning: mysqli_query(): Empty query in /home/u703357939/public_html/linea4vlc.php on line 12

Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given in /home/u703357939/public_html/linea4vlc.php on line 21


Sabéis dónde puede es el error? Podéis echarme un cable por favor?
Gracias.
Un saludo

Aquí todo el fichero PHP

PHP:
<?
$databasehost = "host";
$databasename = "db";
$databaseusername = "user";
$databasepassword = "pass";
$con = mysqli_connect($databasehost,$databaseusername,$databasepassword,$databasename) or die(mysqli_error());
mysqli_select_db($con, $databasename) or die(mysqli_error());
mysqli_query($con, "SET CHARACTER SET utf8");
$query = file_get_contents("php://input");
$sth = mysqli_query($con, $query);
if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysqli_error();
}
else
{
    $rows = array();
    while($r = mysqli_fetch_assoc($con, $sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>
 

wistong

Member
Licensed User
Longtime User
...
if (mysql_errno()) { // Puede ser el error ----> (mysqli_errno())
header("HTTP/1.1 500 Internal Server Error");
echo $query.'\n';
echo mysqli_error();
}
...
 

Espinosa4

Active Member
Licensed User
Longtime User
...
if (mysql_errno()) { // Puede ser el error ----> (mysqli_errno())
header("HTTP/1.1 500 Internal Server Error");
echo $query.'\n';
echo mysqli_error();
}
...
Gracias wistong,

También entiendo que tenía que tocar eso. Pero entiendo que accede ahí cuando hay un error de conexión pero en este caso conecta bien y pasa directamente a $rows=array();

Me devuelve el error comentado por algo de parámetros. Leyendo por ahí sobre el comando devuelve null si está´vacío o algo similar. El SQL lo mando desde el programa cuando llamo al PHP. Es como si no le llegara nada.

No sé, no consigo que funcione y llevo mucho tiempo con esto. Y como no tengo mucha idea.... ando más perdido que una mona en un garaje.

Saludos
 

Espinosa4

Active Member
Licensed User
Longtime User
En el programa me da un error cuando uso variable.parse (error de json)

Luego subo la parte del código
 

rscheel

Well-Known Member
Licensed User
Longtime User
Yo utilizo este y me funciona de maravilla, bueno hice yo mismo el código, puedes sacar ideas de este código.

B4X:
<?php

    $host = "server";
    $user = "usuario";
    $pw = "password";
    $db = "db";

    $conn = new mysqli($host, $user, $pw, $db);

    /* verificar la conexión */
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    /* cambiar el conjunto de caracteres a utf8 */
    if (!$conn->set_charset("utf8")) {
        printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
    exit();
    }

    $result = $conn->query($sql);

    $SQL = $_GET["SQL"];
    $SQL_SEPARADO = explode(";", $SQL);

    for($i = 0 ;$i<count($SQL_SEPARADO);$i++) {
        if ($SQL_SEPARADO[$i]!='') { 
            $pre = $conn->query($SQL_SEPARADO[$i]);
            if ($pre->num_rows > 0) {
                $rows = array();
                while($r = $pre->fetch_assoc()) {
                    $rows[] = $r;
                }
            }
        }
    }
       print json_encode($rows);

?>
 

Espinosa4

Active Member
Licensed User
Longtime User
Yo utilizo este y me funciona de maravilla, bueno hice yo mismo el código, puedes sacar ideas de este código.

B4X:
<?php

    $host = "server";
    $user = "usuario";
    $pw = "password";
    $db = "db";

    $conn = new mysqli($host, $user, $pw, $db);

    /* verificar la conexión */
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    /* cambiar el conjunto de caracteres a utf8 */
    if (!$conn->set_charset("utf8")) {
        printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
    exit();
    }

    $result = $conn->query($sql);

    $SQL = $_GET["SQL"];
    $SQL_SEPARADO = explode(";", $SQL);

    for($i = 0 ;$i<count($SQL_SEPARADO);$i++) {
        if ($SQL_SEPARADO[$i]!='') {
            $pre = $conn->query($SQL_SEPARADO[$i]);
            if ($pre->num_rows > 0) {
                $rows = array();
                while($r = $pre->fetch_assoc()) {
                    $rows[] = $r;
                }
            }
        }
    }
       print json_encode($rows);

?>

Hola rscheel
Gracias por tu ayuda. Me devuelve el programa un error al hacer el parse. Igual que antes. Creo que no le llega la información del sql. Antes me funcionaba perfectamente pero al cambiar del servidor me apareció lo de deprecated.

Usas HttpUtils2? O la versión antigua?

Un saludo
 

rscheel

Well-Known Member
Licensed User
Longtime User
Hola rscheel
Gracias por tu ayuda. Me devuelve el programa un error al hacer el parse. Igual que antes. Creo que no le llega la información del sql. Antes me funcionaba perfectamente pero al cambiar del servidor me apareció lo de deprecated.

Usas HttpUtils2? O la versión antigua?

Un saludo

Utilizo el mismo HttpUtils2, verifica la versión de php de tu servidor, crea un phpinfo.php con el codigo adentro

B4X:
<?php

phpinfo();

y colócalo en el servidor y correlo desde el navegador.
 

Espinosa4

Active Member
Licensed User
Longtime User
Utilizo el mismo HttpUtils2, verifica la versión de php de tu servidor, crea un phpinfo.php con el codigo adentro

B4X:
<?php

phpinfo();

y colócalo en el servidor y correlo desde el navegador.
Infinitas gracias!
Voy probando y comento.

Saludos
 

Espinosa4

Active Member
Licensed User
Longtime User
Utilizo el mismo HttpUtils2, verifica la versión de php de tu servidor, crea un phpinfo.php con el codigo adentro

B4X:
<?php

phpinfo();

y colócalo en el servidor y correlo desde el navegador.

Hola de nuevo rscheel!
He creado el phpinfo y me dice es es la versión
PHP Version 5.5.35

Si ejecuto el php que me has comentado me devuelve lo siguiente:
Warning: mysqli::query(): Empty query in /home/u703357939/public_html/linea4vlc.php on line 20
null

Poco a poco parece que va funcionando. Ahora es como si no le llegara la info de la sentencia SQL que le mando desde el programa.
Dejo aquí el código para ver si puedes ver el fallo y me echas un cable que voy muy perdido. Es un servicio que lo único que mira es el último registro y compara.

Me falla en esta línea
Respuesta=parser.NextArray

Error occurred on line: 62 (Starter)
java.lang.RuntimeException: JSON Array expected.


Infinitas gracias a todos por vuestra ayuda.
Perdonad las molestias.
Saludos



B4X:
#Region  Service Attributes
    #StartAtBoot: True
#End Region

Sub Process_Globals
    '--- These global variables will be declared once when the application starts.
    '--- These variables can be accessed from all modules.
    Private tmrStart As Timer
    Dim hc As HttpJob
    Type Renglones (Renglon1 As String, Renglon2 As String)
    Dim Cambios As List
    Dim UltimoRegistro,NuevoRegistro As Int
    Dim PrimeraVez As Boolean
    Dim s As String
End Sub


Sub Globals

End Sub


Sub Service_Create
    '--- set timer to start app after 1 seconds
    '--- this gives time for system to init other stuff
    tmrStart.Initialize("tmrStart",10000)
    PrimeraVez = True
    UltimoRegistro = 0
End Sub

Sub Service_Start (StartingIntent As Intent)
    '--- enabled timer
    tmrStart.Enabled = True
End Sub

Private Sub Service_Destroy
End Sub


Sub tmrStart_Tick
    Dim SQL As String
    Dim job As HttpJob
    SQL="SELECT * FROM listadocambios WHERE Activo ='S' ORDER BY Num"
    ExecuteRemoteQuery(SQL,job)
End Sub


Sub ExecuteRemoteQuery(SQL As String, JobName As String)
    Dim job As HttpJob
     job.Initialize(JobName, Me)
    job.PostString("http://linea4vlc.esy.es/linea4vlc.php", SQL)
End Sub


Sub JobDone(job As HttpJob)
    If job.Success Then
        Dim res As String
        res = job.GetString
        Dim parser As JSONParser
        parser.Initialize(res)
        Dim Respuesta As List
        Respuesta=parser.NextArray
        Log(job.JobName&"-"&res)
        Select job.JobName
            Case "job"
             If PrimeraVez Then
                Dim m As Map
                Cambios.Initialize
                Cambios = parser.NextArray
                For i = 0 To Cambios.Size - 1
                m = Cambios.Get(i)
                UltimoRegistro = m.Get("Num")
                Next
                PrimeraVez = False
            Else
                Dim notificacion As Notification
                notificacion.Icon = "icon"     
                Dim m As Map
                Cambios.Initialize
                Cambios = parser.NextArray
                For i = 0 To Cambios.Size - 1
                    m = Cambios.Get(i)     
                    NuevoRegistro = m.Get("Num")
                Next
                If NuevoRegistro > UltimoRegistro Then
                    UltimoRegistro = NuevoRegistro
                    ToastMessageShow("Hay cambios",True)
                    notificacion.SetInfo("Cambios","Hay nuevos cambios",Main)
                End If
            End If

        End Select
    End If
    job.Release
End Sub
 
Last edited:

rscheel

Well-Known Member
Licensed User
Longtime User
Asegurate de estar usando el mismo código php que te adjunte, verifica que la conexión este bien echa, $host, $user, $pw, $db y también verifica el select que estas haciendo si estas llamando a la tabla correcta.

En el navegador anda probando el php de esta manera.

B4X:
http://linkdelservirdor/tu.php?SQL=SELECT * FROM listadocambios;

Y así vas viendo lo que te devuelve una ves que tengas corregido eso sigues con la sincronizacion de la aplicación, pero como dije primero verifica que el php este haciendo lo correcto.

Y recuerda no dejar los datos de conexión al servidor, en este caso dejaste la url.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Asegurate de estar usando el mismo código php que te adjunte, verifica que la conexión este bien echa, $host, $user, $pw, $db y también verifica el select que estas haciendo si estas llamando a la tabla correcta.

En el navegador anda probando el php de esta manera.

B4X:
http://linkdelservirdor/tu.php?SQL=SELECT * FROM listadocambios;

Y así vas viendo lo que te devuelve una ves que tengas corregido eso sigues con la sincronizacion de la aplicación, pero como dije primero verifica que el php este haciendo lo correcto.

Y recuerda no dejar los datos de conexión al servidor, en este caso dejaste la url.


Y comenta esta linea en el php esta demás y es la que te envía el error.

B4X:
    //$result = $conn->query($sql);
 

Espinosa4

Active Member
Licensed User
Longtime User
Y comenta esta linea en el php esta demás y es la que te envía el error.

B4X:
    //$result = $conn->query($sql);
Si, si. Si pongo la sentencia sql en el php ya me funciona ya correctamente y me devuelve bien los datos.

Pero no sé cómo comprobar si desde el programa cuando le envío la sentencia la recibe bien, mal o no la recibe. Uso job.poststring.

Gracias por tu tiempo
 

rscheel

Well-Known Member
Licensed User
Longtime User
Simplemente envía de esta manera.

Primero creas la conexión al php.

B4X:
Sub GetData(SQL_Cadena As String, sJob As String)
    Dim GetSQL As HttpJob
    GetSQL.Initialize(sJob, Me)
    GetSQL.download2("http://tuurlservidor/tu.php", Array As String ("SQL", SQL_Cadena))  
End Sub

Luego para pasar un SELECT por ejemplo

B4X:
Sub User_PHP
    GetData("SELECT * FROM tutabla" ,"GetResultado")
End Sub

y después para mostrar los datos recividos

B4X:
Sub JobDone(Job As HttpJob)
    If Job.Success Then
            Dim res As String
            res = Job.GetString
    If res.StartsWith("{") Or res.StartsWith("[") Then
         
            Log("Back from Job:" & Job.JobName )
            Log("Job Text: " & res)
            Dim parser As JSONParser
            parser.Initialize(res)

        Select Job.JobName
         
            Case "GetResultado"
               Dim ListDatos As List
                 ListaDatos = parser.NextArray 'returns a list with maps
                If ListaDatos.Size == 0 Then
                   'Algun mensaje.
                Else
                    For i = 0 To ListaDatos.Size - 1
                        Dim Datos As Map
                        Datos = ListaDatos.Get(i)
                        dato1 = Datos.Get("id")
                    Next
                    s.TransactionSuccessful
                    s.EndTransaction
                    s.Close
                End If
        End Select
    Else
    'alguna condicion
    End If
    Else
        'ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release

End Sub

Espero te sirva, lo que tu tienes estas enviando los datos por POST y los estas recibiendo en el php por GET si quieres seguir usando lo que tienes cambia el GET del php por REQUEST.
 

Espinosa4

Active Member
Licensed User
Longtime User
Infinitas graciasss.
Ya voy entiendo poco a poco las cosas.

Pruebo y comento.
Graciasss
 

Espinosa4

Active Member
Licensed User
Longtime User
Simplemente envía de esta manera.

Primero creas la conexión al php.

B4X:
Sub GetData(SQL_Cadena As String, sJob As String)
    Dim GetSQL As HttpJob
    GetSQL.Initialize(sJob, Me)
    GetSQL.download2("http://tuurlservidor/tu.php", Array As String ("SQL", SQL_Cadena))
End Sub

Luego para pasar un SELECT por ejemplo

B4X:
Sub User_PHP
    GetData("SELECT * FROM tutabla" ,"GetResultado")
End Sub

y después para mostrar los datos recividos

B4X:
Sub JobDone(Job As HttpJob)
    If Job.Success Then
            Dim res As String
            res = Job.GetString
    If res.StartsWith("{") Or res.StartsWith("[") Then
       
            Log("Back from Job:" & Job.JobName )
            Log("Job Text: " & res)
            Dim parser As JSONParser
            parser.Initialize(res)

        Select Job.JobName
       
            Case "GetResultado"
               Dim ListDatos As List
                 ListaDatos = parser.NextArray 'returns a list with maps
                If ListaDatos.Size == 0 Then
                   'Algun mensaje.
                Else
                    For i = 0 To ListaDatos.Size - 1
                        Dim Datos As Map
                        Datos = ListaDatos.Get(i)
                        dato1 = Datos.Get("id")
                    Next
                    s.TransactionSuccessful
                    s.EndTransaction
                    s.Close
                End If
        End Select
    Else
    'alguna condicion
    End If
    Else
        'ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release

End Sub

Espero te sirva, lo que tu tienes estas enviando los datos por POST y los estas recibiendo en el php por GET si quieres seguir usando lo que tienes cambia el GET del php por REQUEST.
Hola de Nuevo rscheel,

Olé, Olé y Oléeeee!
Funciona perfectamente!

Infinitas gracias por todo tu tiempo y perdona el tostón de. mensajes. Ahora viendo que funciona es hora de entender el código y aprender.

Infinitas graciasss!
Te debo unas cuantas cañas :)

Saludos
 
Last edited:

vbmundo

Well-Known Member
Licensed User
Hola a todos,

¿me podríais echar un cable por favor?

Resulta que estoy intentando conectar desde mi programa a una base de datos alojada en una web gratuita y me aparece el error... Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO

Yo no sé lo que tengo que hacer. Tengo que modificar mi php? Tengo que tocar sólo para la conexión pero dejo la parte de que devuelva json

B4X:
<?php

$databasehost = "host";
$databasename = "libros";
$databaseusername ="root";
$databasepassword = "1234";


$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_set_charset("utf8");
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input");

$sth = mysql_query($query);


if (mysql_errno()) {
header("HTTP/1.1 500 Internal Server Error");
echo $query.'\n';
echo mysql_error();
}
else
{
$rows = array();
while($r = mysql_fetch_assoc($sth)) {

$rows[] = $r;
}


print json_encode($rows);
}
?>

Muchas gracias
Saludos

hola, veo que muchos usan PHP, http y webservice para leer desde MySQL, pero sabias que hay ya controles en este foro, listos para descargar, donde te conectas directamente a MysQL sin php, ni nada intermedio ?

Saludos
 
Top