Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Ali Baba en 30 Junio 2018, 02:44 am



Título: Problemas al insertar datos con php en mysql
Publicado por: Ali Baba en 30 Junio 2018, 02:44 am
Estoy intentando insertar el titulo de una pagina en una base de datos que un webcrawler me extrae. Este es el codigo php del webcrawler y me funciona perfectamente:

Código
  1. <?php
  2.  
  3.  $dbHost = 'localhost';
  4.  $dbName = 'invento';
  5.  $dbUser = 'root';
  6.  $dbPass = '';
  7.  
  8. try {
  9.  
  10.  $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName","$dbUser", "$dbPass");
  11.  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12.  
  13. } catch(Exception $e) {
  14.  
  15.  echo $e->getMessage();
  16. }
  17.  
  18.  
  19. $html = file_get_contents('https://www.google.com');
  20. preg_match('/<title>(.*)<\/title>/i', $html, $title);
  21.  
  22. $title_out = $title[1];
  23.  
  24. $sql = "INSERT INTO prueba('title') VALUES ($title_out)";
  25.  
  26.  $query = $pdo->prepare($sql);
  27.  
  28.  $result = $query->execute([
  29.    'title' => $title_out
  30.  ]);
  31. }
  32.  

pero en la parte de insertar en la tabla prueba el valor me sale este error que dice ser un error de sintaxis en sql, quisiera saber que error estoy cometiendo:

Citar
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''title') VALUES (Google)' at line 1 in C:\xampp\htdocs\webcrawler\php-web-crawler\index.php:29 Stack trace: #0 C:\xampp\htdocs\webcrawler\php-web-crawler\index.php(29): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\webcrawler\php-web-crawler\index.php on line 29

la linea 29 hace referencia al array que se pasa al execute()


Título: Re: Problemas al insertar datos con php en mysql
Publicado por: Necronomicon.93 en 30 Junio 2018, 03:59 am
hola magodesian, espero poder ayudarte.. creo que tenes que poner comillas a
( ' title_out ' )";

por lo que veo dice que es un error de sintaxis en sql.. proba si es eso..no estoy del todo seguro..proba con las comillas , creo que va asi..sino proba de ponerlas de esta forma

$sql = "INSERT INTO prueba('title') VALUES (' "$title_out ' ")";

escapando las comillas.


Título: Re: Problemas al insertar datos con php en mysql
Publicado por: Ali Baba en 30 Junio 2018, 04:19 am
hola magodesian, espero poder ayudarte.. creo que tenes que poner comillas a
( ' title_out ' )";

por lo que veo dice que es un error de sintaxis en sql.. proba si es eso..no estoy del todo seguro..proba con las comillas , creo que va asi..sino proba de ponerlas de esta forma

$sql = "INSERT INTO prueba('title') VALUES (' "$title_out ' ")";

escapando las comillas.

Con esa sintaxis me da este error:

Citar
Parse error: syntax error, unexpected '$title_out' (T_VARIABLE) in C:\xampp\htdocs\webcrawler\php-web-crawler\index.php on line 24


Título: Re: Problemas al insertar datos con php en mysql
Publicado por: Necronomicon.93 en 30 Junio 2018, 14:13 pm
Asi con comillas simples ya probaste no tambien?

$sql = "INSERT INTO prueba('title') VALUES ('  $title_out ')";

o asi $sql = "INSERT INTO prueba('title') VALUES (' . title_out . ')";

no puedo ayudarte mucho mas..no se me ocurre nada.


Título: Re: Problemas al insertar datos con php en mysql
Publicado por: #!drvy en 2 Julio 2018, 00:40 am
Creo que te has liado con como funcionan las queries preparadas.

1. El problema que te tira, es que esas poniendo prueba('title'), cuando indicas que solo quieres afectar a X columnas de esa forma, no puedes poner los nombres entre comillas, ha de ir a pelo.

2. Si estas preparando una sentencia, no pases el valor antes de tiempo. Literalmente estas pasando el valor que obtienes en la propia sentencia, antes de prepararla. Y eso es no hacer nada. Además lo invocas de una forma errónea.

Código
  1. $sql = "INSERT INTO prueba(title) VALUES (:title)";
  2. $query = $pdo->prepare($sql);
  3.  
  4. $result = $query->execute([
  5.    ':title' => $title_out
  6. ]);

Saludos