#php #sql #forms #syntax-error
#php #sql #формы #синтаксическая ошибка
Вопрос:
Хорошо, итак, я новичок в php и sql, и у меня есть эта форма, которая отправляет некоторые имена и города в базу данных.
Мне удалось это сделать, но как только я нажимаю кнопку отправки, я получаю сообщение об ошибке:
«Ошибка: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘1’ в строке 1»
но, когда я проверяю в phpmyadmin, там есть новая запись !!, поэтому я не уверен, что не так, вот в чем проблема.
это код:
<?php
mysql_connect("localhost", "name", "pass") or die(mysql_error());
echo "Connection to the server was successful!<br/>";
mysql_select_db("db_name") or die(mysql_error());
echo "Database was selected!<br/>";
$resultComuna = mysql_query("SELECT idComuna, nombre FROM comuna ORDER BY nombre ASC");
$resultGiro = mysql_query("SELECT idGiro, nombre FROM giro ORDER BY nombre ASC");
?>
<html>
<head>
<title>TEST</title>
</head>
<body>
<br/><br/>
<form name="form" method="POST" action="test_action.php">
<div align="center">
<!--///////////////// input nombre //////////////////////// -->
NOMBRE CLIENTE:
<input name="nombreCliente" type="text" maxlength="30" size="40"></>
<!-- ///////////////////////////////////////////////////////////// -->
<!-- ////////////////////drop box para giro ///////////////////// -->
GIRO:
<select name="giro">
<?php
while($row = mysql_fetch_assoc($resultGiro)){
echo "<option value="".$row['idGiro']."">".$row['nombre']."</option><br/>";
}
?>
</select>
<!-- ///////////////////////////////////////////////////////////// -->
<!-- ////////////// dropbox para comunas //////////////////////// -->
COMUNA:
<select name="comunas">
<?php
while($row = mysql_fetch_assoc($resultComuna)){
echo "<option value="".$row['idComuna']."">".$row['nombre']."</option><br/>";
}
?>
</select>
<!-- ////////////////////////////////////////////////////////////// -->
<input type="submit" value="Ingresar"> </>
</div>
</form>
</body>
</html>
и test_action.php является:
<?php
$con = mysql_connect("localhost", "name", "pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("data_base", $con);
$query = mysql_query("SELECT max(idNombre) 1 as id FROM nombre");
$row = mysql_fetch_array($query);
$idMax = $row['id'];
$sql = mysql_query("INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')");
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "record added";
mysql_close($con)
?>
Комментарии:
1. Замените весь бессмысленный код, который вы опубликовали, и опубликуйте необработанный sql-запрос, который передается в mysql, без какого-либо php или HTML-кода.
2. Об этом говорит синтаксическая ошибка: один из ваших SQL-операторов сформирован неправильно. Попробуйте повторить все SQL-инструкции, тогда вы обнаружите SQL-ошибку.
3. Избегайте ваших входных данных! Скрывается SQL-инъекция.
Ответ №1:
Вы вставляете идентификатор в одинарные кавычки:
$sql = mysql_query("INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')");
Можете ли вы предоставить структуру таблицы? Идентификатор — это целое число или переменный символ?
Комментарии:
1. Это не может быть проблемой. Mysql автоматически приводит типы.
2. это структура таблицы:
CREATE TABLE
nombre` (idNombre
int(10) unsigned NOT NULL,Comuna_idComuna
int(10) unsigned NOT NULL,Giro_idGiro
int(10) unsigned NOT NULL,nombre
varchar(255) сопоставляет latin1_general_ci значение по умолчанию NULL, ПЕРВИЧНЫЙ КЛЮЧ (idNombre
), KEYNombre_FKIndex3
(Comuna_idComuna
), KEYNombre_FKIndex1
(Giro_idGiro
) )`3. Можете ли вы повторить команду sql. Я предполагаю, что что-то не так в значении, которое вы получаете form
$_POST
.4. Похоже, что это была бы проблема, решаемая параметризацией.
Ответ №2:
Попробуйте изменить test_action.php для:
<?php
$con = mysql_connect("localhost", "name", "pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("data_base", $con);
$query = mysql_query("SELECT max(idNombre) 1 as id FROM nombre");
$row = mysql_fetch_array($query);
$idMax = $row['id'];
$query = "INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')";
$sql = mysql_query($query);
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error().'<br>query: '.$query);
}
echo "record added";
mysql_close($con);
?>
Это помогает при отладке