2015-08-24 18 views
-1

我有一个包含列person和person_initials的表。点击提交时,我想将输入框中的名称插入名称表中的人员列中,其中首字母等于初始定义的名称。在这种情况下,表中只有一行包含person_initial列中的“I”。 请参阅下面的代码。我确定准备好的声明中必须存在基本的语法错误,但我看不到它。无知的道歉。使用预准备语句时出现非对象错误

的index.php:

<html> 
<body> 
<form method="post"> 
Insert: <input type="text" name="q" value="Tim"/> 
<input type="submit" value="Submit"> 
</form> 

<?php 
if (isset($_POST['q'])) { 
$test_name = $_POST['q']; 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "personnames"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

     if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
     } 

$people = 'I'; 
$stmt = $conn->prepare("INSERT INTO names (person) VALUE=(?) where 
person_initial=(?)"); 

$stmt->bind_param("ss",$test_name,$people); 

$stmt->execute(); 
$stmt->close(); 
$conn->close(); 
} 
?> 
</body> 
</html> 
+0

INSERT没有一个'where'条款。 INSERT ON DUPLICATE的作用与INSERT SELECT一样http://dev.mysql.com/doc/refman/5.6/en/insert.html。编辑:和史蒂夫所述的更新。 http://dev.mysql.com/doc/refman/5.6/en/insert-select.html --- http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate。 html –

+1

听起来像你正在尝试做一个SQL UPDATE不是一个插入 – Steve

+0

*“当提交被点击时,我想**输入框中的姓名**插入人列”* - 有趣的是,这不是你在接受的答案中说了什么*“当然是更新而不是插入 - 我觉得很傻”* - 史蒂夫一直都是对的,无论是在他的评论中,还是在他的回答如下。 ***更新***在哪里起作用? –

回答

1

INSERT查询是错误的。使用

$stmt = $conn->prepare("INSERT INTO names (person) VALUES(?)"); 

代替

$stmt = $conn->prepare("INSERT INTO names (person) VALUE=(?) where 
person_initial=(?)"); 

如果要更新,然后使用更新查询这样

$stmt = $conn->prepare("UPDATE names SET person=? where person_initial=?"); 
+0

完美!谢谢!当然是更新而不是插入 - 我感到非常愚蠢 –

2

你似乎试图更新,在这种情况下,语法是:

$stmt = $conn->prepare("UPDATE names SET person=? where person_initial=?"); 
+0

很确定他们想要在那里插入一个史蒂夫。 *“当点击提交时,我想将输入框中的名称插入到人员列中* –

+0

@ Fred-ii-也许很难说。”在这种情况下,只有1行包含“I” person_initial列存在于表中“'让我相信相反,但只有OP知道 – Steve

+0

好吧,OP现在在接受的答案中说明:*”当然是更新而不是插入 - 我觉得很傻“* - 所以我upvoted。你一直都是对的。 –