2016-06-30 3 views
0

Я работаю на веб-сайте с PHP и MySQL, сначала я использую XAMPP для предварительного просмотра моего сайта, здесь все работает нормально (версия XAMPP PHP - 5.7), проблема в том, что когда я загрузил через FTP содержимое своего сайта, запросы INSERT и UPDATE не работают над моими PHP-скриптами.Запросы MySQL INSERT и UPDATE, не работающие с PHP 5.2.17

Я прочитал несколько статей о проблемах совместимости между обеими версиями, FTP-сервер использует PHP 5.2.17.

Запросы SELECT работают нормально на сервере, поэтому вход в базу данных не является проблемой.

Это мой код, используя UPDATE:

include_once 'db_post.php'; 
$mysqli = new mysqli(DATA_HOST, DATA_USER, DATA_PASSWORD, DATA_DATABASE); 

$catTitle = mysqli_real_escape_string($mysqli, $_POST['catName']); 
$catDesc = mysqli_real_escape_string($mysqli, $_POST['catDesc']); 
$catID = mysqli_real_escape_string($mysqli, $_GET['ID']); // I get this in the redirection, the value isn't in the POST form 

$cT = "UPDATE categorias SET NombreCat = '$catTitle', DescripcionCat = '$catDesc', ImagenCat = 'no_image.png' WHERE IDCat = $catID"; 

if ($mysqli->query($cT) === TRUE) { header("Location: ../management.php?Action=ManageCategories&Edit=Successful"); } 
else { header("Location: ../management.php?Action=ManageCategories&Edit=Error"); } 

Перенаправление проходит через ошибки и ничего не сохраняется в базе данных.

Другая информация о моей БД заключается в том, что я использую InnoDB вместо MyISAM, который предположительно рекомендуется в phpMyAdmin.

Кроме того, когда я пытаюсь вставить строку, нет запроса:

include_once 'db_post.php'; 
$mysqli = new mysqli(DATA_HOST, DATA_USER, DATA_PASSWORD, DATA_DATABASE); 

$catTitle = mysqli_real_escape_string($mysqli, $_POST['catName']); 
$catDesc = mysqli_real_escape_string($mysqli, $_POST['catDesc']); 

$cT = "INSERT INTO categorias (IDCat, NombreCat, DescripcionCat, ImagenCat) VALUES (null, '$catTitle', '$catDesc', 'no_image.png')"; 

if ($mysqli->query($cT) === TRUE) { header("Location: ../management.php?Action=ManageCategories&Add=Successful"); } 
else { header("Location: ../management.php?Action=ManageCategories&Add=Error"); } 

Таким образом, вопрос, который является правильной формой для запроса в MySQL в этой версии PHP?

+1

Какая ошибка MySQL дает вам в качестве причины для этого не удается? –

+0

Почему вы используете 10-летнюю версию PHP? Это просто попрошайка, чтобы ваш сайт был взломан. Это и вставка пользовательских данных в вашу базу данных без проверки ... – miken32

+0

@ miken32 владельцы хостинг-серверов не хотят обновлять свой PHP, я не могу сделать это из своего дома. :( –

ответ

0

Вы должны использовать prepared statements, чтобы избежать взломов SQL-инъекций, и вы также должны получать сообщения об ошибках. PDO делает это гораздо проще, чем MySQLi:

include_once 'db_post.php'; 
$dsn = sprintf("mysql:host=%s;dbname=%s", DATA_HOST, DATA_DATABASE); 
$db = new PDO($dsn, DATA_USER, DATA_PASSWORD); 

if (empty($_GET["ID"])) { 
    $action = "Add"; 
    $stmt = $db->prepare("INSERT INTO categorias (IDCat, NombreCat, DescripcionCat, ImagenCat) VALUES (null, ?, ?, 'no_image.png')"; 
    $result = $db->prepare([$_POST["catName"], $_POST["catDesc"]); 
} else { 
    $action = "Edit"; 
    $stmt = $db->prepare("UPDATE categorias SET NombreCat = ?, DescripcionCat = ?, ImagenCat = 'no_image.png' WHERE IDCat = ?"; 
    $result = $stmt->execute([$_POST["catName"], $_POST["catDesc"], $_GET["ID"]]); 
} 

if ($result === true) { 
    header("Location: ../management.php?Action=ManageCategories&$action=Successful"); 
} else { 
    error_log("Database error: " . $stmt->errorInfo()); 
    header("Location: ../management.php?Action=ManageCategories&$action=Error"); 
} 

Теперь, если у вас есть ошибка, просто проверить свои журналы.

+0

Метод надежных запросов с использованием PDO был полезен, после проверки моего кода я обнаружил, что проблема была в инструкции SQL, мое имя таблицы, например, «Категории», а в моем коде - «категории», проблема был верхний C, который работал нормально в XAMPP, но не на сервере. –

Смежные вопросы