Foros del Web » Programando para Internet » PHP »

Ayuda con MySql

Estas en el tema de Ayuda con MySql en el foro de PHP en Foros del Web. Buenas tardes a todos! Estoy haciendo un script para borrar registros en mySQL. El script es este: Código PHP: <?php session_start (); if (isset( $_SESSION [ ...
  #1 (permalink)  
Antiguo 26/09/2010, 10:23
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Ayuda con MySql

Buenas tardes a todos! Estoy haciendo un script para borrar registros en mySQL. El script es este:

Código PHP:
<?php

session_start
();

if (isset(
$_SESSION['k_username'])){

// process form

$link mysql_connect("localhost""root""pswc");

mysql_select_db("db",$link);

$consulta "DELETE FROM `usuarios` WHERE (`usuarios`.`usuario`=$_SESSION['k_username'])";

$result mysql_query($consulta);

}else{

echo 
'Error, algo ha fallado';

}

?>
Pero tengo dos problemas:

1.- No hace ni el if ni el else

2.- Imprime este error:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\user\destroy.php on line 13

Cómo lo soluciono?
  #2 (permalink)  
Antiguo 26/09/2010, 10:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

Búsca la línea 13 y mira la anterior y la que te menciona a ver si encuentras algún error.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 26/09/2010, 10:42
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda con MySql

La línea 13 es esta :

Código PHP:
Ver original
  1. $consulta = "DELETE FROM `usuarios` WHERE (`usuarios`.`usuario`=$_SESSION['k_username'])";
  #4 (permalink)  
Antiguo 26/09/2010, 10:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

Las variables tipo array que estén encerradas entre comillas la llave no puede estar con comillas (ni sencillas, ni dobles). Ya que de por si, al indicarla entre las comillas (o sea la que encierra todo el texto), el valor en la llave es tipo texto y no necesita declararse como tal.
Código PHP:
Ver original
  1. <?php
  2. $arr = array('foo'=>'bar');
  3. echo "$arr['foo']"; //Imprime: Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in ... on line 3
  4. echo "$arr[foo]"; //Imprime: bar
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 26/09/2010, 10:50
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Ayuda con MySql

Para mi lo raro es esto: `usuarios`.`usuario`

Eso de concatenar no lo veo bien. Probá:

`usuarios.usuario`

En realidad, la consulta debiera quedar así:


Código SQL:
Ver original
  1. $k_username = $_SESSION['k_username'];
  2. $consulta = "DELETE FROM `usuarios` WHERE `usuarios.usuario=$k_username`";
  #6 (permalink)  
Antiguo 26/09/2010, 10:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

No mayid, ese simbolo se llama backtick. Mira esto para que tengas una mejor idea http://www.forosdelweb.com/3518238-post6.html
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 26/09/2010, 11:40
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Ayuda con MySql

Bueno, aparte de los backticks (que siempre me habían resultado raros hasta leer el link que me pasate), lo que digo es que para escribir nombre_de_tabla.nombre_de_campo no veo bien usar comillas o backticks entremedio.

El escribio: `usuarios`.`usuario`

Yo interpreto que quería decir `usuarios.usuario`
  #8 (permalink)  
Antiguo 26/09/2010, 11:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

No se puede porque sino MySQL interpretará que existe una tabla llamada usuarios.usuario. Debe ser `usuarios`.`usuario`.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 26/09/2010, 12:19
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Ayuda con MySql

Eso me confunde. Hace un tiempo vengo estudiando consultas multitabla y el usar un punto hace mencion a tabla.atributo. No veo por que tenga que ser diferente en esta consulta.

En fin, desconozco la estructura de la db de la que estamos hablando, pero me imagino que la tabla se llama usuarios y el campo usuario. Y de ser así, no se necesitaría especificar el nombre de la tabla. Y por otro lado en la consulta no se necesitan los parentesis.

$consulta = "DELETE FROM `usuarios` WHERE (`usuarios`.`usuario`=$_SESSION['k_username'])";

$consulta = "DELETE FROM `usuarios` WHERE(`usuario`=$_SESSION['k_username']";
  #10 (permalink)  
Antiguo 26/09/2010, 16:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

Es sencillo, vamos a imaginar que hiciste esta tabla, e ingresaste estos valores
Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS `foo.bar`;
  2. CREATE TABLE IF NOT EXISTS `foo.bar` (
  3.   `foo` int(11) NOT NULL AUTO_INCREMENT,
  4.   `bar` varchar(30) NOT NULL,
  5.   PRIMARY KEY (`foo`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  7.  
  8. --
  9. -- Dumping data for table `foo.bar`
  10. --
  11.  
  12. INSERT INTO `foo.bar` (`foo`, `bar`) VALUES
  13. (1, 'foo'),
  14. (2, 'bar');
Cuando vayas a hacer un select necesitas hacerlo de esta forma
Código MySQL:
Ver original
  1. SELECT * FROM  `foo`.`foo.bar` WHERE  `bar` LIKE  'bar'
Si lo haces `foo.foo.bar` te traerá un error de que tabla no existe. Porque la forma de indicarle a mysql que es un indicador es encerrar todo aquello con el backtick y separar con el punto para indicarle a mysql qué es la base de datos y qué es la tabla (siguendo las reglas de sintaxis). Porque en el indicador tú le puedes poner el caracter de punto (aunque no lo recomiendo) como parte del nombre.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 26/09/2010, 16:50
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Ayuda con MySql

Ya entendi! Mi error estaba en usar los backticks para el nombre del campo.

Corrijo mi último ejemplo, según usualmente hago las consultas:

Código SQL:
Ver original
  1. $consulta = "DELETE FROM `usuarios` WHERE usuario=`$_SESSION['k_username']`";

Ojala eso sirva. Puntualmente, quiero remarcar que los backticks se usan alrededor del contenido (y no del nombre del campo, al menos en mi db).
  #12 (permalink)  
Antiguo 26/09/2010, 17:02
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Ayuda con MySql

Tampoco, porque el backtick es para usarlo en los indicadores, si haces eso va a decir que no conoce alguna columna llamada conforme al valor que le hayas indicado a la variable que mencionas. La forma de hacer ese tipo de consulta es usando comillas o doble comillas en la parte de valor. Si te retorna algo es porque de casualidad existe una columna con el nombre del valor que tienes en la variable.

La forma correcta sería algo así
Código MySQL:
Ver original
  1. "DELETE FROM `usuarios` WHERE `usuario` = '$_SESSION[k_username]'"
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: mysql
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 00:06.