2014-02-01 4 views
0

У меня есть этот код:Неверное значение вставляется в базу данных

<form action="#" method="post"> 
    <input type="text" name="famname"/> 
    <input type="submit" name="submit"/> 
</form> 
<?php 
if(isset($_POST['submit'])){ 
    if(!isset($_POST['famname'])){ 
     echo "Please set Family Name."; 
     die(); 
    } 
    $mysqli = new mysqli('localhost', 'root', 'marais19', 'famlink'); 

    if($mysqli->connect_errno) { 
     echo "Connection Failed (".$mysqli->connect_errno.") : ".$mysqli->connect_error; 
     die(); 
    } 
    $e = 'yes'; 
    $stmt = $mysqli->prepare("INSERT INTO families(famname) VALUES (?)"); 
    $stmt->bind_param('d', $e); 
    $stmt->execute(); 
} 
?> 

Но если я типа Smith в поле ввода он помещает только 0 в базу данных. Код SQL является, как следует:

CREATE TABLE IF NOT EXISTS `families` (
    `famname` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT 'NOFAM', 
    KEY `famname` (`famname`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

И:

INSERT INTO `families` (`famname`) VALUES 
('0'); 

Как я могу сделать это, чтобы положить Smith в базу данных, а не 0

ответ

4

Вы бросаете его в число (на самом деле double), когда вы привязываете его к запросу. Вы должны использовать s вместо d:

$stmt->bind_param('d', $e); 

должен быть

$stmt->bind_param('s', $e); 

См the manual по типам:

i corresponding variable has type integer 
d corresponding variable has type double 
s corresponding variable has type string 
b corresponding variable is a blob and will be sent in packets 
+0

Спасибо так много! Я потратил несколько часов, пытаясь заставить это работать. –

+0

@ C'mon И вот как вы узнаете –

+0

... как RTFM. –

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