2012-11-02 44 views
-2

我对PHP和MySQL有点新鲜。点击编辑主题按钮时,我正在浏览教程并在下面看到错误消息。我将包括我正在使用的所有适用的代码。我很确定问题在于数据库连接,因为显示的错误是从connection.php页面打印的。获取语法错误,提供的所有代码

错误:

Database connection failed: 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 '1' at line 1

数据库:

I have 1 database(widget_corp) with 3 tables 
    Tables: 
    subjects(id, menu_name, position, visible), 
    pages(id, subject_id, menu_name, position, visible, content), 
    users(id, username, hashed_password) //this one is not used yet 

源码:从的functions.php

<?PHP require_once("includes/connection.php"); ?> 
    <?PHP require_once("includes/functions.php"); ?> 
    <?PHP 
    if(isset($_POST['submit'])) { 
    $errors = array(); 
    $required_fields = array('menu_name', 'position', 'visible'); 
    foreach($required_fields as $fieldname) { 
    if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname]))) { 
    $errors[] = $fieldname; 
    } 
    } 
    $fields_with_lengths = array('menu_name' => 30); 
    foreach($fields_with_lengths as $fieldname => $maxlength) { 
    if(strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { 
    $errors[] = $fieldname; } 
    } 
    if (empty($errors)) { 
    // Perform Update 
    $id = mysql_prep($_GET['subj']); 
    $menu_name = mysql_prep($_POST['menu_name']); 
    $position = mysql_prep($_POST['position']); 
    $visible = mysql_prep($_POST['visible']); 

    $query = "UPDATE subjects SET menu_name = '{$menu_name}', position = {$position}, visible = {$visible} WHERE id = {$id}"; 
    $result = mysql_query($query, $connection); 
    if(mysql_affected_rows() == 1) { 
    // Sucess 
    } else { 
    // Failed 
    } 
    } else { 
    } // end: if (isset($_POST['submit'])) 
    } 
    ?> 
    <?PHP find_selected_page(); ?> 

    <?PHP include("includes/header.php"); ?> 

    <table id="structure"> 
    <tr> 
    <td id="navigation"> 
    <?PHP echo navigation($sel_subject, $sel_page); ?> 
    </td> 
    <td id="page"> 
    <h2>Edit Subject: <?PHP echo $sel_subject['menu_name']; ?></h2>   
    <form action="edit_subject.php?subj="<?PHP echo urlencode($sel_subject['id']); ?>" method="post"> 
    <p>Subject name: 
    <input type="text" name="menu_name" value="<?PHP echo $sel_subject['menu_name']; ?>" id="menu_name" /> 
    </p> 
    <p>Position: 
    <select name="position"> 
    <?PHP 
    $subject_set = get_all_subjects(); 
    $subject_count = mysql_num_rows($subject_set); 
    // $subject_count +1 b/c we are adding a subject 
    for($count=1; $count <= $subject_count+1; $count++) { 
    echo "<option value=\"{$count}\""; 
    if ($sel_subject['position'] == $count) { 
    echo " selected"; 
    } 
    echo ">{$count}</option>"; 
    } 
    ?> 
    </select> 
    </p> 
    <p>Visible: 
    <input type="radio" name="visible" value="0"<?PHP 
    if($sel_subject['visible'] == 0) { echo " checked"; } 
    ?>/> No 
    &nbsp; 
    <input type="radio" name="visible" value="1" <?PHP 
    if($sel_subject['visible'] ==1) {echo " checked"; } 
    ?> /> Yes 
    </p> 
    <input type="submit" name="submit" value="Edit Subject" /> 
    </form> 
    <br /> 
    <a href="content.php">Cancel</a> 
    </td> 
    </tr> 
    </table> 
    <?PHP require("includes/footer.php"); ?> 

适用功能

function redirect_to($location = NULL) { 
    if ($location != NULL) { 
    header("Location: {$location}"); 
    exit; 
    } 
    } 

    function navigation($sel_subject, $sel_page) { 
    $output = "<ul class=\"subjects\" >"; 
    $subject_set = get_all_subjects(); 
    while ($subject = mysql_fetch_array($subject_set)) { 
    $output .= "<li"; 
    if ($subject["id"] == $sel_subject["id"]) {$output .= " class=\"selected\"";} 
    $output .= "><a href=\"edit_subject.php?subj=" . urlencode($subject["id"]) . "\">{$subject["menu_name"]}</a></li>"; 

    $page_set = get_pages_for_subject($subject["id"]); 
    $output .= "<ul class=\"pages\">"; 
    while ($page = mysql_fetch_array($page_set)) { 
    $output .= "<li"; 
    if ($page['id']==$sel_page['id']) {$output .= " class=\"selected\"";} 
    $output .= "><a href=\"content.php?page=" . urlencode($page["id"]) . "\">{$page["menu_name"]}</a></li>"; 
    } 
    $output .= "</ul>"; 
    } 
    $output .= "</ul>"; 
    return $output; 
    } 

    function mysql_prep($value) { 
    $magic_quotes_active = get_magic_quotes_gpc(); 
    $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0 
    if ($new_enough_php) { //PHP v4.3.0 or higher 
    // undo any magic quote effects so mysql_real_escape_string can do the work 
    if($magic_quotes_active) { $value = stripslashes($value); } 
    $value = mysql_real_escape_string($value); 
    } else { //before PHP v4.3.0 
    // if magic quotes aren't already on then add slahses manually 
    if(!$magic_quotes_active) { $value = addslashes($value); } 
    // if magic quotes are active, then the slashes already exist 
    } 
    return $value; 
    } 

    function get_subject_by_id($subject_id){ 
    global $connection; 
    $query = 'SELECT * FROM `subjects` WHERE `id`= ' . (int)$subject_id . 'LIMIT 1'; 
    $result_set = mysql_query($query, $connection); 
    confirm_query($result_set); 
    // REMEMBER: 
    //if no rowes are returned, fetch array will return false 
    if ($subject = mysql_fetch_array($result_set)) { 
    return $subject; 
    } else { 
    return NULL; 
    } 
    } 

    function get_pages_for_subject($subject_id) { 
    global $connection; 
    $query = "Select * 
    FROM pages 
    WHERE subject_id={$subject_id} 
    ORDER BY position ASC"; 

    $pages_set = mysql_query($query, $connection); 
    confirm_query($pages_set); 
    return $pages_set; 
    } 

    function get_page_by_id($page_id){ 
    global $connection; 
    $query = 'SELECT * FROM `pages` WHERE `id` = ' . (int)$page_id . ' LIMIT 1'; 
    $result_set = mysql_query($query, $connection); 
    confirm_query($result_set); 
    // REMEMBER: 
    //if no rowes are returned, fetch array will return false 
    if ($subject = mysql_fetch_array($result_set)) { 
    return $subject; 
    } else { 
    return NULL; 
    } 
    } 

    function get_all_subjects() { 
    global $connection; 
    $query = "SELECT * FROM subjects ORDER BY position ASC"; 
    $subject_set = mysql_query($query, $connection); 
    confirm_query($subject_set);  
    return $subject_set;     
    } 

    function find_selected_page() { 
    global $sel_subject; 
    global $sel_page; 

    if (isset($_GET['subj'])) { 
    $sel_subject = get_subject_by_id($_GET['subj']); 
    $sel_page = NULL; 
    } else if (isset($_GET['page'])) { 
    $sel_subject = NULL; 
    $sel_page = get_page_by_id($_GET['page']); 
    } else{ 
    $sel_subject = NULL; 
    $sel_page = NULL; 
    } 
    } 

    function confirm_query($result_set) { 
    if (!$result_set) { 
    die("Database connection failed: " . mysql_error()); 
    } 
    } 

包含的页面

header.php 

    <html> 
    <head> 
    <title>Widget Corp</title> 
    <link href="stylesheets/public.css" media="all" rel="stylesheet" type="text/css" /> 
    </head> 
    <body> 
    <div id="header"> 
    <h1>Widget Corp</h1> 
    </div> 
    <div id="main"></div></body></html> 

footer.php

</div> 
    <div id="footer">Copyright 2007, Widget Corp</div> 
    </body> 
    </html> 
    <?PHP 
    if (isset($connection)){ 
    mysql_close($connection); 
    } 
    ?> 

connection.php

<?PHP 
    require("constants.php"); 
    $connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS); 
    if (!$connection) { 
    die("Database connection failed: " . mysql_error()); 
    } 
    $db_select = mysql_select_db(DB_NAME, $connection); 
    if (!$db_select) { 
    die("Database selection failed: " . mysql_error()); 
    } 
    ?> 

constants.php

<?PHP 
    // Database Constants 
    define("DB_SERVER", "localhost"); 
    define("DB_USER", "root"); 
    define("DB_PASS", "********"); 
    define("DB_NAME", "widget_corp"); 
    ?> 
+1

我们只需要SQL查询,而不是整个代码。 – deceze

+1

我们应该做你的工作吗? – slash28cu

+1

@Jason这是在代码中,而不是来自MySQL的错误。 – deceze

回答

5

它看起来像在功能.PHP,你也行

$query = 'SELECT * FROM `subjects` WHERE `id`= ' . (int)$subject_id . 'LIMIT 1'; 

,并没有空间LIMIT之前。尝试更改'LIMIT 1'' LIMIT 1',看看会发生什么。

要更快速地发现这些错误,你需要添加错误检查的只是一些小行:

$result_set = mysql_query($query, $connection); 
if (!$result_set) { 
    echo "mysql_query() error: ", mysql_error($connection), "\nquery was: $query\n"; 
    die(); 
} 

然后,您将看到并已生成的SQL这使得可以快速识别错误。

+0

我可以发誓我已经做了几次改变。这已经解决了实际的错误。谢谢。 –

+0

@hakre只是想知道为什么你编辑我的答案,而不是添加评论,因为现在我的答案实际上更多的是你的答案。您的编辑很有帮助,但只是想知道为什么您将有用的信息添加到我的答案中。 –

+0

@jdwire:只是为了让答案更完整,并为其增加一些价值。它仍然是你的答案顺便说一句,但是请阅读以下的一些细节:http://stackoverflow.com/faq#editing – hakre