Problemas al insertar datos con php en mysql

Iniciado por Diesan Romero, 30 Junio 2018, 02:44 AM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

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 (php) [Seleccionar]

<?php 

  $dbHost 
'localhost';
  
$dbName 'invento';
  
$dbUser 'root';
  
$dbPass '';

try {

  
$pdo = new PDO("mysql:host=$dbHost;dbname=$dbName","$dbUser""$dbPass");
  
$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

} catch(
Exception $e) {

  echo 
$e->getMessage();
}


$html file_get_contents('https://www.google.com');
preg_match('/<title>(.*)<\/title>/i'$html$title);

$title_out $title[1];

$sql "INSERT INTO prueba('title') VALUES ($title_out)";
  
  
$query $pdo->prepare($sql);

  
$result $query->execute([
    
'title' => $title_out
  
]);
}


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:

CitarFatal 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()

Necronomicon.93

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.

Diesan Romero

Cita de: 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.

Con esa sintaxis me da este error:

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

Necronomicon.93

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.

#!drvy

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 (php) [Seleccionar]
$sql = "INSERT INTO prueba(title) VALUES (:title)";
$query = $pdo->prepare($sql);

$result = $query->execute([
    ':title' => $title_out
]);


Saludos