user3488862 user3488862 - 3 months ago 26
MySQL Question

Error: INSERT INTO fails mysql

I have a problem with mySQL I get this error

Notice: Undefined property: PDO::$error in C:\MAMP\htdocs\paresFiles.php on line 33
Error: INSERT INTO `searchtable`(`word`, `array`, `count`) VALUES ( pinocchio , 1 ,-1)

Notice: Undefined property: PDO::$error in C:\MAMP\htdocs\paresFiles.php on line 33
Error: INSERT INTO `searchtable`(`word`, `array`, `count`) VALUES ( alice's adventures in wonderland , 2 ,-1)

Notice: Undefined property: PDO::$error in C:\MAMP\htdocs\paresFiles.php on line 33
Error: INSERT INTO `searchtable`(`word`, `array`, `count`) VALUES ( peter pan , 3 ,-1)

Notice: Undefined property: PDO::$error in C:\MAMP\htdocs\paresFiles.php on line 33
Error: INSERT INTO `searchtable`(`word`, `array`, `count`) VALUES ( snow white , 4 ,-1)


I want to insert to my search table in mysql 3 values and when I insert them I get this error and didn't get any data in my table.
what I need to do to solve this error?

this is my code (for insert data):

include_once 'connect.php';

$dir = "storage";
$title;
$auther;
$fileNum;
// Open a directory, and read its contents
foreach (glob($dir."/*.txt") as $filename) {
$handle = fopen($filename, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
if(substr( $line, 0, 3 ) === "#id")
{
$fileNum=substr( $line, 5, 3 );
}
if(substr( $line, 0, 6 ) === "#title")
{
$title=substr( $line, 8, 100 );
}
if(substr( $line, 0, 5 ) === "#name")
{
$auther=substr( $line, 8, 12 );
}
}
$titleVal=-1;

$sql = "INSERT INTO `searchtable`(`word`, `array`, `count`) VALUES ($title,$fileNum,$titleVal)";

if ($db->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $db->error;
}
fclose($handle);
}


connect to mysql:

<?php
$db = new PDO('mysql:host=localhost;dbname=search;charset=utf8mb4', 'root', 'root');
if (!$db) {
die('Could not connect:' . mysql_error());
}
echo 'Connected successfully';
?>

Answer

You should use prepare statements.

Something like this

$sql = "INSERT INTO searchtable (word, array, count) VALUES (:word , :array, :count)";

$statement = $db->prepare($sql);
$statement->exec(array(
    'word' => $title,
    'array' => $fileNum,
    'count' => $titleVal
));
Comments