首先,对不起,如果我写了一些nosense,但我通常不用英文写,这对我来说有点难。 第二,我是程序员的新手,所以我的问题可能太简单和明显了(我保证在这里问之前我试着找到答案)。
好吧,我想用php和mysql练习,所以我想制作一个bbdd和一个GUI来控制它。以下是我遇到问题的代码:
MySql(v5.6.12):
CREATE TABLE IF NOT EXISTS `personaje` (
`id_personaje` int(3) NOT NULL AUTO_INCREMENT,
`nombre` varchar(30) NOT NULL,
`servidor` varchar(25) NOT NULL,
`nivel` int(3) NOT NULL,
`faccion` varchar(10) NOT NULL,
`clase` varchar(25) NOT NULL,
`raza` char(30) NOT NULL,
`profesion1` varchar(20) NOT NULL,
`nivel1` int(4) NOT NULL,
`profesion2` varchar(20) NOT NULL,
`nivel2` int(4) NOT NULL,
`nivel_coc` int(4) NOT NULL,
`nivel_pes` int(4) NOT NULL,
`nivel_arqu` int(4) NOT NULL,
`nivel_prim` int(4) NOT NULL,
PRIMARY KEY (`id_personaje`),
UNIQUE KEY `raza` (`raza`),
UNIQUE KEY `clase` (`clase`),
UNIQUE KEY `prof1` (`profesion1`),
UNIQUE KEY `prof2` (`profesion2`),
UNIQUE KEY `faccion` (`faccion`)
)
ENGINE=InnoDB
PHP(v5.4.12):
<?php
//Recoger los datos que llegan
$nombre = $_POST['nombreChar'];
$raza = $_POST['razaChar'];
$clase = $_POST['claseChar'];
$servidor = $_POST['servidorChar'];
$faccion = $_POST['faccionChar'];
$nivel = $_POST['nivelChar'];
settype($nivel,"int");
$prof1 = $_POST['prof1Char'];
$lvlpr1 = $_POST['lvlpr1Char'];
$prof2 = $_POST['prof2Char'];
$lvlpr2 = $_POST['lvlpr2Char'];
$nivel_coc = $_POST['nivel_cocChar'];
$nivel_arqu = $_POST['nivel_arquChar'];
$nivel_pes = $_POST['nivel_pesChar'];
$nivel_prim = $_POST['nivel_primChar'];
$muestra = gettype($nivel);
//Conectandonos con la base de datos
$conexion = mysql_connect(/* ... */);
mysql_select_db (/* ... */, $conexion) OR die ("No se puede conectar");
//Comprobar que no haya otro personaje repetido
/* $Consulta_per = "SELECT nombre, servidor FROM personaje WHERE nombre =
'".$nombre."' && servidor = '".$servidor."'";
$busqueda = mysql_query($Consulta_per,$conexion) or die ("Error en busqueda " . mysql_error());
if (!$busqueda)
*/
$res = mysql_query("INSERT INTO personaje (nombre, servidor, nivel, faccion,
clase, raza, profesion1, nivel1, profesion2, nivel2, nivel_coc,
nivel_pes, nivel_arqu, nivel_prim) VALUE ('$nombre','$servidor',
'$nivel,','$faccion','$clase','$raza','$prof1','$lvlpr1',
'$prof2','$lvlpr2','$nivel_coc','$nivel_pes','$nivel_arqu',
'$nivel_prim')",$conexion)
or die ("No se pudo insertar " . mysql_error() ." ". $nivel . $muestra );// this line show the error
echo "Insertado con exito";
mysql_close($conexion);
?>
来的形式是:
<FORM method="POST" action="crear-personaje.php">
Nombre <INPUT type="text" name="nombreChar" id="nombreChar" value="Nombre"></br>
Raza <INPUT type="text" name="razaChar" id="razaChar" value="Raza"></br>
Facción <INPUT type="text" name="faccionChar" id="faccionChar" value="Facción"></br>
Clase <INPUT type="text" name="claseChar" id="claseChar" value="Clase"></br>
Servidor <INPUT type="text" name="servidorChar" id="servidorChar" value="Servidor"></br>
Nivel <INPUT type="number" name="nivelChar" id="nivelChar" value="1"></br>
Profesión 1 <INPUT type="text" name="prof1Char" id="prof1Char" value="Profesion1"></br>
Nivel de profesión 1 <INPUT type="text" name="lvlpr1Char" id="lvlpr1Char" value="1"></br>
Profesion 2 <INPUT type="text" name="prof2Char" id="prof2Char" value="Profesion2"></br>
Nivel de profesion 2 <INPUT type="text" name="lvlpr2Char" id="lvlpr2Char" value="1"></br>
Nivel cocina<INPUT type="text" name="nivel_cocChar" id="nivel_cocChar" value="1"></br>
Nivel pesca<INPUT type="text" name="nivel_pesChar" id="nivel_pesChar" value="1"></br>
Nivel primeros auxilios<INPUT type="text" name="nivel_primChar" id="nivel_primChar" value="1"></br>
Nivel arqueología<INPUT type="text" name="nivel_arquChar" id="nivel_arquChar" value="1"></br>
<INPUT type="submit" NAME="enviar" VALUE="Dar de alta!" id="enviar">
</FORM>
Apache版本2.4.4
一切都必须好,但是......不。当我试图在“nivel”字段中插入一个整数值(如87或1)时,mysql会给我下一个错误:
"No se pudo insertar Data truncated for column 'nivel' at row 1 1integer"
,就像我在代码中写的评论一样。
(“No se pudo insertar”表示“无法插入”)。
正如你所看到的,我将变量$ nivel强制为整数,并且PHP正确识别(这就是我将$ nivel和$ muestra放入死刑句中的原因)。我尝试在MySql中将类型“nivel”变量从int(3)更改为Varchar(3),让我介绍一下该字符,但是...我更喜欢使用int类型(字符的级别是一个整数, obviusly)。
任何人都知道为什么MySql会给我这个错误?我该怎么做才能解决这个问题?
感谢您的帮助!
答案 0 :(得分:1)
在你的INSERT SQL中你有'$ nivel', - 注意逗号里面的:
$res = mysql_query("INSERT INTO personaje (nombre, servidor, nivel, faccion,
clase, raza, profesion1, nivel1, profesion2, nivel2, nivel_coc,
nivel_pes, nivel_arqu, nivel_prim) VALUE ('$nombre','$servidor',
'$nivel,', ...
这只是问题的错字吗?如果不是,那可能是导致您的错误的原因,因为MySQL正在努力将'87,'
转换为整数。