PHP - Uso de php con mysqli

   
Vista:

Uso de php con mysqli

Publicado por Ernesto (5 intervenciones) el 11/12/2015 18:09:21
Hola a todos.
Saludos. Por primera vez en este foro. Tengo un problema en el que he agotado todas las posibilidades y nada, acudo a la comunidad a ver si me pueden ayudar a solventarlo. La situación es la siguiente. Tengo este código html, específicamente html5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="rightpanel">
            <div id="buscar">
              <form action="procesa.php" method="post">
                 <input type="text" value="Buscar..."  name="buscar" id="campo-buscar" onkeyup="loadXMLDoc()" onfocus="if (this.value == 'Buscar...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Buscar...';}" placeholder="Nombre del vídeo a buscar" />
                 <input type="submit"  value="Ir" />
              </form>
                <div id="myDiv"></div>
            </div>
            <div id="div1">Vídeos:</div>
			<div id="container">
				<?php
                    $data = $GLOBALS["DB"]->emum();
                    while ($row = mysqli_fetch_array($data)){
                        echo "<div class='row' onclick='index.playFile($row[0])'>";
                        echo "<span class='rt'>$row[1]</span>";
                        echo "<span class='rd'>$row[2]</span>";
                        echo "</div>";
                    }?>

Adjunto nada mas la parte donde se me desencadena el error. Que es en la linea donde esta la sentencia while. Este fichero es el index.php y desde que lo llamo me da este error:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/tutoriales/public_html/index.php on line 41
En la primera linea de este fichero tengo lo siguiente: <?php include("database.php"); ?> y a continuación les voy a mostrar el código de dicho fichero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
define ("DATABASE_SERVER", "localhost");
	define ("DATABASE_USER", "efelix");
	define ("DATABASE_PASSWORD", "ef1403/*-");
	define ("DATABASE_NAME", "videos");
 
class TDataBase {
 
	public $ctn;
 
	function __construct(){
		$this->ctn = mysqli_connect(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME);
	}
 
	function insert($name, $desc, $filesnames){
		$id = date("U");
		$sql = "INSERT INTO videos VALUES ('$id', '$name', '$desc');";
		mysqli_query($this->ctn, $sql);
 
		for ($i = 0; $i < count($filesnames); $i++){
			$fname = $filesnames[$i];
			$sql = "INSERT INTO archivos VALUES('$id', '$fname')";
			mysqli_query($this->ctn, $sql);
			echo $sql;
		}
 
		return $id;
	}
 
	function emum(){
		return mysqli_query($this->ctn, "SELECT * FROM videos");
	}
 
	function enum_files_of($id){
		return mysqli_query($this->ctn, "SELECT * FROM archivos WHERE archivos.idvideo = '$id'");
	}
 
}
 
	$DB = new TDataBase();
	$GLOBALS["DB"] = $DB;
?>

Trabajo sobre Ubuntu 14.04. No conozco mucho de mysqli, antes usaba mysql, pero en una reinstalación del sistema operativo y ulterior upgrade del mismo me dejó de funcionar al código. Por la versión de php he tenido que pasar a mysqli pues al ver que no ejecutaba nada tuve que ir al php.ini y modificar dos lineas realtivas a los mensajes de error y cundo me dice que están obsoletas las funciones mysql para la versión de php. espero me puedan ayudar. Muchas gracias disculpen lo extenso del mensaje.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Uso de php con mysqli

Publicado por Mauricio (25 intervenciones) el 11/12/2015 23:59:00
empecemos por lo primero
tiene registros la tabla donde estas haciendo la consulta?
intenta esto
1
2
$data = $GLOBALS["DB"]->emum();
echo '<pre>; print_r($data);echo '</pre>';die();
para ver que es lo que trae data lo mas probable es que no traiga nada y por eso el metodo mysqli_fetch_array esta esperando el valor

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Ernesto (5 intervenciones) el 12/12/2015 14:04:59
Gracias por tu respuesta. Pero cuando trato de hacer lo que me sugieres me da un error de sintaxis:

Parse error: syntax error, unexpected '/' in /var/www/tutoriales/public_html/index.php on line 41.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Mauricio (25 intervenciones) el 12/12/2015 15:47:08
perdon faltaba una comilla
1
echo '<pre>'; print_r($data);echo '</pre>';die();

que editor de PHP usas? te recomiendo uno que te coloree la sintaxis
yo uso PHPdesigner8
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Ernesto (5 intervenciones) el 12/12/2015 15:59:00
Parece que tienes razón en lo que planteas referente a los registros de la base de datos, pues la misma no tiene ninguno, además de dos tablas que debe de crear y las mismas no están creadas. Cuando usaba las funciones mysql nada de esto pasaba y todo funcionaba de maravillas. Cuando pase a mysqli, del cual no tengo muchos conocimientos todo se ha complicado.
De todas formas le voy a hacer un backup a la misma base de datos que tengo sobre windows, la cual esta llena de información para ver que sucede.
De todas formas el error ahora no aparece, lo que sale en ese div donde debían mostrarse los ficheros que hay en la base de datos en el resultado de la la línea que me sugeriste.
mysqli_result Object
(
[current_field] => 0
[field_count] => 3
[lengths] =>
[num_rows] => 0
[type] => 0
)
Gracias nuevamente, para el Lunes cuando tenga la base de datos te comento y valoro tu solución. Pero todo parece indicar que es ees el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Nacho Esviza (2 intervenciones) el 12/12/2015 16:13:48
Estimados,

Con MySQL en PHP, de ninguna manera da un error cuando se consulta una tabla vacía. Da un resultado vacío sobre el cual podés pedir todas las veces que quieras la próxima fila que no va a pasar nada, no te da un error, de hecho es una consulta legítima, por ejemplo, quiero saber los empleados activos en el area de compras que tienen sueldo mayor a 10.000 euros mensuales, es legitimo que me devuelva 0 filas y no pasa nada.

El propio PHP te está diciendo que hay un error en la línea 41 de index.php. En esa línea estarás haciendo un mysqli_fetch_array( $resultado ) sobre un $resultado que debe ser -1 por un error en el QUERY, en cuanto a la sintaxis del query.

Por favor, pasame cómo estás creando ese query, así vemos si hay un error en eso.

Acordate que cada vez que hacés mysqli_query está bueno verificar si obtuviste un resultado positivo o FALSE. Si fue FALSE entonces hay un error en el query en cuanto a sintaxis o estructura de tabla, pero NUNCA da error por no encontrar registros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Ernesto (5 intervenciones) el 12/12/2015 16:19:37
Gracias por tu respuesta. Mira aquí te pongo el fichero donde construyo la query:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
define ("DATABASE_SERVER", "localhost");
	define ("DATABASE_USER", "efelix");
	define ("DATABASE_PASSWORD", "ef1403/*-");
	define ("DATABASE_NAME", "videos");
 
class TDataBase {
 
	public $ctn;
 
	function __construct(){
		$this->ctn = mysqli_connect(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME);
	}
 
	function insert($name, $desc, $filesnames){
		$id = date("U");
		$sql = "INSERT INTO videos VALUES ('$id', '$name', '$desc');";
		mysqli_query($this->ctn, $sql);
 
		for ($i = 0; $i < count($filesnames); $i++){
			$fname = $filesnames[$i];
			$sql = "INSERT INTO archivos VALUES('$id', '$fname')";
			mysqli_query($this->ctn, $sql);
			echo $sql;
		}
 
		return $id;
	}
 
	function emum(){
		return mysqli_query($this->ctn, "SELECT * FROM videos");
	}
 
	function enum_files_of($id){
		return mysqli_query($this->ctn, "SELECT * FROM archivos WHERE archivos.idvideo = '$id'");
	}
 
}
 
	$DB = new TDataBase();
	$GLOBALS["DB"] = $DB;
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Nacho Esviza (2 intervenciones) el 13/12/2015 20:45:27
Sigo sin ver qué ponés en el index.php, qué valores llama cuando llega a la línea 41. Ese archivo que me ponés, que dices "aquí armo la query" es una clase, con varios métodos que arman queries. Cuál es la que llama? no se entiende. por favor pegá el index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Mauricio (25 intervenciones) el 12/12/2015 17:36:51
tienes razon no devuelve error me referia a cuando algun metodo necesita un valor pero no lo obtiene porque no hay datos en la tabla
para evitar eso habria que validar si hay registros para despues ejecutar el metodo que ocupa el valor de la tabla
, a lo que dices que haya error en el query si te fijas lo que publico mysqli_result Object
1
2
3
4
5
6
7
(
[current_field] => 0
[field_count] => 3
[lengths] =>
[num_rows] => 0
[type] => 0
)
quiere decir que el query no es el que esta fallando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de php con mysqli

Publicado por Ernesto (5 intervenciones) el 14/12/2015 13:54:26
Ahí mando lo que tiene el index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php include("database.php"); ?>
 
<!DOCTYPE html>
<html>
<head>
	<title>Reproductor de vídeos</title>
	<meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta content="Video">
	<link rel="stylesheet" type="text/css" href="style.css">
	<script type="text/javascript" src="ajax.js"></script>
	<script type="text/javascript" src="index.js"></script>
</head>
<body onload="index.onLoad()">
 
	<div id="sup-detail"></div>
 
	<div id="center">
 
		<div id="banner">
			<span>Reproductor de vídeos Tutoriales</span>
 
		</div>
 
 
		<video id="video" controls=true onended="index.onVideoEnd()">
 
		</video>
		<div id="rightpanel">
            <div id="buscar">
              <form action="procesa.php" method="post">
                 <input type="text" value="Buscar..."  name="buscar" id="campo-buscar" onkeyup="loadXMLDoc()" onfocus="if (this.value == 'Buscar...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Buscar...';}" placeholder="Nombre del vídeo a buscar" />
                 <input type="submit"  value="Ir" />
              </form>
                <div id="myDiv"></div>
            </div>
            <div id="div1">Vídeos:</div>
			<div id="container">
				<?php
                    $data = $GLOBALS["DB"]->emum();
                    echo '<pre>'; print_r($data);echo '</pre>';die();
                    while ($row = mysqli_fetch_array($data)){
                        echo "<div class='row' onclick='index.playFile($row[0])'>";
                        echo "<span class='rt'>$row[1]</span>";
                        echo "<span class='rd'>$row[2]</span>";
                        echo "</div>";
                    }?>
 
			</div>
		</div>
 
 
		<div class="segment">
			<div id="div1">Subir nuevo video:</div>
			<form action="controller.php/upload" id="frm-upload" method="POST" enctype="multipart/form-data">
				<table>
					<tr>
						<td>Nombre del video:</td>
						<td><input type=text name="vname"></td>
					</tr>
 
					<tr>
						<td>Descripción:</td>
						<td><input type=text name="vdesc"></td>
					</tr>
 
					<tr>
						<td>Archivos:</td>
						<td id="td-files"><input type=file name="vfile[]" id="ff"></td>
					</tr>
 
					<tr>
						<td align="right" colspan="2">
							<a href="javascript:index.doAddFile()">Agregar archivo</a> |
							<a href="javascript:index.doQuitFile()">Quitar archivo</a> |
							<a href="javascript:index.doUpload()">Subir vídeo</a>
						</td>
					</tr>
 
				</table>
			</form>
		</div>
 
	</div>
 
</body>
</html>
Eso es el fichero index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar