2015-06-23 78 views
2

我一直在試圖切換到準備好的語句,但我無法弄清楚爲什麼我的新代碼不再起作用。我對使用這些軟件仍然陌生,但仍然知道這是安全的最佳實踐。任何幫助,將不勝感激。謝謝。準備好的語句不運行MYSQLI PHP

<?php 
$servername = "11.11.11.11"; 
$username = "root"; 
$password = "root"; 
$dbname = "sit"; 

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


if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully"; 
$result = mysqli_query($conn, "SELECT * FROM `ourstory` "); 
$values = mysqli_fetch_array($result); 


if(isset($_POST['ourstory_title'])){ 
$ourstory_title = $_POST['ourstory_title']; 
$ourstory_testimonial = $_POST['ourstory_testimonial']; 
$ourstory_content = $_POST['ourstory_content']; 
$ourstory->execute(); 

$ourstory = $conn->prepare("UPDATE ourstory SET 
    ourstory_title='$ourstory_title' , 
    ourstory_content='$ourstory_content' , 
    ourstory_testimonial='$ourstory_testimonial' 
    WHERE ourstory_id='1'"); 
$ourstory->bind_param("sss", $ourstory_title, $ourstory_content, $ourstory_testimonial); 




if (mysqli_query($conn, $ourstory)) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . mysqli_error($conn); 
} 
$ourstory->close(); 
$conn->close(); 

} 

?> 
<form id="comment_form" method="post" 
     action="<?php echo $ourstory?>" 
     onsubmit="setTimeout(function() { 
      window.location.reload(); 
     }, 10), location.reload(true);"> 

<table width="100%" border="0" cellspacing="1" cellpadding="2"> 


<tr> 
<td width="85%">About Us Title</td> 
</tr> 
<tr> 
<td> 
    <input class="commentarea" 
      name="ourstory_title" type="text" 
      id="ourstory_title" value="<?php echo $values['ourstory_title']?>"> 
</td> 
</tr> 
<tr> 
<td width="85%" >Testimonial</td> 
</tr> 
<tr> 
<td> 
    <pre> 
    <textarea class="commentarea" 
     name="ourstory_testimonial" type="text" 
     id="ourstory_testimonial" rows= "10" ><?php echo $values['ourstory_testimonial']?> 
    </textarea> 
    </pre> 
</td> 
</tr> 
<tr> 
<td width="85%" >About Us Content</td> 
</tr> 
<tr> 
<td> 
    <pre> 
    <textarea class="commentarea" name="ourstory_content" 
     type="text" id="ourstory_content" 
     rows= "10" ><?php echo $values['ourstory_content']?> 
    </textarea> 
    </pre> 
</td> 
</tr> 


<tr> 

<td> 

<input type="submit" value="Update"> 
</td> 
</tr> 
</table> 
</form> 
+0

讓我們[繼續聊天討論](HTTP://聊天.stackoverflow.com /房間/ 81295 /討論-之間-fred的-II和 - 肖恩 - 迪瓦恩)。 –

回答

4

結合馬克的答案,我提交以下作爲一個免費的答案,並使用我的一些評論留下t他是OP的問題。

首先,<textarea>沒有類型。 type="text"刪除所有這些。

然後,$ourstory->execute();是錯誤的,它需要一旦你使用馬克的答案,並使用佔位符作爲答案,從手動http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

你不應該有if (mysqli_query($conn, $ourstory)) {什麼你說$ourstory->bind_param("sss",...後去希望在條件語句中使用affected_rowshttp://php.net/manual/en/mysqli.affected-rows.php來檢查查詢是否確實成功。


從您的編輯:https://stackoverflow.com/revisions/31003865/4

printf("Affected rows (UPDATE): %d\n", $ourstory->affected_rows); 
$ourstory->execute(); 

這需要執行後去:

$ourstory->execute(); 
printf("Affected rows (UPDATE): %d\n", $ourstory->affected_rows); 

,但我會用一個有條件if,它應該是連接的變量,即從手冊:

int $mysqli->affected_rows; 

這樣做:

printf("Affected rows (UPDATE): %d\n", $conn->affected_rows); 

例如,從手冊:

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* Insert rows */ 
$mysqli->query("CREATE TABLE Language SELECT * from CountryLanguage"); 
printf("Affected rows (INSERT): %d\n", $mysqli->affected_rows); 
1
$ourstory = $conn->prepare("UPDATE ourstory SET ourstory_title='$ourstory_title' ,ourstory_content='$ourstory_content' ,ourstory_testimonial='$ourstory_testimonial' WHERE ourstory_id='1'"); 
$ourstory->bind_param("sss", $ourstory_title, $ourstory_content, $ourstory_testimonial); 

如果你綁定值準備語句,你需要在查詢中設置佔位符....不注入值本身,然後嘗試結合他們

$ourstory = $conn->prepare("UPDATE ourstory SET ourstory_title=? ,ourstory_content=? ,ourstory_testimonial=? WHERE ourstory_id='1'"); 
$ourstory->bind_param("sss", $ourstory_title, $ourstory_content, $ourstory_testimonial); 

你也可以綁定的價值ourstory_id以及

+0

[查看我對OP標記的評論...](http://stackoverflow.com/questions/31003865/prepared-statement-not-running-mysqli-php#comment50035514_31003865)以及它下面的一個。 –

+0

我想我在評論中涵蓋了全部或大部分內容。但是,如果他們碰巧消失了,那麼...... –