2015-06-01 2 views
0

Я застрял в очень важной части моего проекта и хотел бы помочь, но я, похоже, застрял в синтаксисе PHP/SQL и не могу заставить запрос работать.PHP SQL обновляет сразу несколько строк

HTML код:

<form name="homepage" method="POST" action="" > 
    <p>Page Title</p> 
    <input id="pagetitle" type="text" name="home_title" value="<?php select_text("SELECT fieldcontent FROM content WHERE name='home_title'", "fieldcontent") ?>"/> 
    <p>Paragraph</p> 
    <textarea id="paragraph" name="home_text"><?php select_text("SELECT fieldcontent FROM content WHERE name='home_text'", "fieldcontent") ?> </textarea> 
    <h1>Images</h1> 
    <div id="image"> 
    <?php select_image("SELECT * FROM `image` WHERE image_cat_id = 8"); ?> 
    </div> 
    <button name="homesavebtn" id="home-save-btn" type="submit">Save Updates</button> 
</form> 

PHP код - Выбрать данные

function select_text($sql, $echo) { 
include 'connect.php'; 

$result = $conn->query($sql); 
if ($result->num_rows > 0); 
while ($row = $result->fetch_assoc()) { 
    echo $row[$echo]; 
    $conn->close(); 
    } 
} 

PHP код - обновление

if ($_POST) { 
if (isset($_POST['homesavebtn'])){ 
$home_title = (isset($_POST['home_title']) ? $_POST['home_title'] : null); 
$home_text = (isset($_POST['home_text']) ? $_POST['home_text'] : null); 

include 'connect.php'; 

$sql = "INSERT INTO content(name, fieldcontent) VALUES ('home_title', '$home_title') ON DUPLICATE KEY UPDATE fieldcontent = '$home_title'"; 
    $sql .= "INSERT INTO content(name, fieldcontent) VALUES ('home_text', '$home_text') ON DUPLICATE KEY UPDATE fieldcontent = '$home_text'"; 

if (mysqli_query($conn, $sql)) { 
echo ""; 
} else { 
echo "" . $sql . "<br>" .mysqli_error($conn); 
} 
$conn->close(); 

} 
} 

Получение следующее сообщение об ошибке:

INSERT INTO content(name, fieldcontent) VALUES ('home_title', 'Mosta Cycling Club') ON DUPLICATE KEY UPDATE fieldcontent = 'Mosta Cycling Club'INSERT INTO content(name, fieldcontent) VALUES ('home_text', '') ON DUPLICATE KEY UPDATE fieldcontent = '' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO content(name, fieldcontent) VALUES ('home_text', '') ON DUPLICATE KE' at line 1

+0

Пожалуйста, добавьте описание проблемы, которую вы испытываете, - что конкретно не так, как вы считаете в данный момент? –

ответ

1

Вы можете использовать VALUES, чтобы получить новое значение, которое вы используете в части обновления. Кроме того, если вы используете prepare и bind_param вы защитите инъекции SQL:

$mysqli = new mysqli('host', 'user', 'password', 'db'); 

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

$stmt = $mysqli->prepare("INSERT INTO content(name, fieldcontent) 
          VALUES ('home_title', ?), ('home_text', ?) 
          ON DUPLICATE KEY UPDATE fieldcontent = VALUES(fieldcontent)"); 

$stmt->bind_param('ss', $home_title, $home_text); 
$stmt->execute(); 
+0

Mysqli нуждается в аргументе типа 'bind_param', не так ли? – cHao

+0

@ cHao да это, исправлено. Благодарю. – dave

+0

В чем смысл 'ss' в $ stmt-> bind_param ('ss', $ home_title, $ home_text); ? – Chri

0

Ваше второе заявление SQL добавляется к вашему первому создает одно длинное заявление, что не имеет смысла. Отделите их на два разных утверждения.

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