Проблемы при попытке INSERT в MySQL в PHP

Я использую переменные для записи информации о пользователях сайта, чтобы наблюдать за их поведением на моем сайте. Мой код выглядит так:

<?php
$pages_visited = "www.example.com, www.example.com/example.php, www.example.com/demo.php";
$con = mysqli_connect("localhost", "user", "password", "pages_visited");
    if (mysqli_connect_errno()) {
        echo "An error occurred when connecting to the database. Sorry.";
    }
mysqli_query($con, "INSERT INTO visit_data ('Pages')
VALUES ('$pages_visited')");
mysqli_close($con);

Хотя, когда я захожу на свой сайт, ничего не происходит, и в таблицу visit_data не добавляются новые строки. Почему это происходит?


person Hussain Khalil    schedule 11.05.2014    source источник
comment
Любые ошибки в вашем журнале ошибок php?   -  person potashin    schedule 11.05.2014
comment
попробуй mysqli_error($con)   -  person ɹɐqʞɐ zoɹǝɟ    schedule 11.05.2014
comment
Попробуйте "INSERT INTO visit_data (Pages)   -  person hjpotter92    schedule 11.05.2014
comment
да кавычки есть :|   -  person ɹɐqʞɐ zoɹǝɟ    schedule 11.05.2014
comment
Попробуйте удалить одинарные кавычки, как упомянул hjpotter92. Также убедитесь, что вы включаете все поля NOT NULL из таблицы в запрос на вставку с их значениями.   -  person MANISH ZOPE    schedule 11.05.2014
comment
Результат mysqli_error: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «Pages) VALUES ('$pages_visited')' в строке 1   -  person Hussain Khalil    schedule 11.05.2014


Ответы (3)


Вам нужно обновить запрос:

INSERT INTO visit_data (`Pages`) VALUES('".$pages_visited."')

На самом деле вы используете одинарную кавычку («Страницы»), проверьте приведенный ниже код. Я проверил этот код локально, он работает

    <?php
$pages_visited = "www.example.com, www.example.com/example.php, www.example.com/demo.php";
$con = mysqli_connect("localhost", "user", "password", "pages_visited");
    if (mysqli_connect_errno()) {
        echo "An error occurred when connecting to the database. Sorry.";
    }

$try = mysqli_query($con, "INSERT INTO visit_data (`Pages`) VALUES('".$pages_visited."')");

if($try === false){
    echo 'error - ';
    echo mysqli_error($con);
}   else{
        echo 'all good';
    }

mysqli_close($con);
person Abdul Rauf    schedule 11.05.2014

попробуйте подготовленные операторы mysqli (ошибка не связана с тем, что не используются подготовленные операторы, но я подумал, что было бы лучше использовать, поскольку функции mysql устарели)

$db = new mysqli('localhost', 'root', '', 'database');
if ($db->connect_errno) {
echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
}

$pages_visited = "www.example.com, www.example.com/example.php, www.example.com/demo.php";

$stmt = $db->prepare("insert into `visit_data` (Pages) values(?)");
$stmt->bind_param('s', $pages_visited);
$stmt->execute();
person Magna    schedule 11.05.2014

Вы должны использовать '". $text_var . "' при использовании строк. Убедитесь, что столбец таблицы, который вы используете, правильный и что вы не пропускаете столбцы, которые не принимают нулевое значение, если только вы не использовали значение по умолчанию при создании таблицы.

это должно работать

<?php

$pages_visited = "www.example.com, www.example.com/example.php, www.example.com/demo.php";
$con = mysqli_connect("localhost", "user", "password", "pages_visited");

if ( mysqli_connect_errno() )
{
    echo "An error occurred when connecting to the database. Sorry.";
}

mysqli_query( $con, "INSERT INTO visit_data ( Pages ) VALUES ( '" . $pages_visited . "' )" );

mysqli_close($con);
person user3587554    schedule 11.05.2014
comment
Это подвержено SQL-инъекциям. Подготовленный оператор с привязкой данных был бы гораздо лучшим решением. Кроме того, вы указали в кавычках (') «Страницы», которые вызывают ошибку. Они должны быть обратными тиками (): Pages` - person Cully; 11.05.2014
comment
Благодарю вас! Замена одинарных кавычек на галочку устранила проблему. - person Hussain Khalil; 11.05.2014
comment
объясните, как быть, если вставляемые данные жестко закодированы, и да, я был на собрании клана, пытаясь сделать подпись в фотошопе. Я был многозадачным мой плохой. - person user3587554; 11.05.2014
comment
@ user3587554 Да, я уверен, что он просто хочет сохранить список URL-адресов example.com в базе данных :) - person Cully; 11.05.2014
comment
Это не отвечает на мой вопрос. Пример кода жестко запрограммирован, верно? Как он открыт для SQL-инъекций, если сохраняемые данные являются константами? Помните, что это основано на опубликованном коде, а не на том, что он будет делать в будущем. - person user3587554; 11.05.2014