2013-03-30 51 views
1

我絕對是jQuery和ajax的新手。目前我正在嘗試從一個JavaScript文件從我的本地sql服務器上創建一個表,我將該語句發佈到.php文件以執行該語句。使用jQuery創建數據庫表的麻煩ajax

js文件:

function executeStatement(sqlStatement){ 
    $.ajax({ 
     type: "post", 
     data: sqlStatement, 
     cache: false, 
     url: "api.php", 
     dataType: "text", 
     error: function(xhr, status, error) { 
     var err = eval("(" + xhr.responseText + ")"); 
     alert(err.Message); 
     }, 
     success: function() 
     { 
     alert ("Success!!"); 
     } 
    }); 
    } 

PHP文件:

require_once('PhpConsole.php'); 
    PhpConsole::start(); 
    debug('HERE!!!'); 

    $sqlStatement = $_POST['sqlStatement']; 

    $host = "*****"; 
    $user = "*****"; 
    $pass = "*****"; 
    $databaseName = "db_user_data"; 

    // Create connection 
    $con = mysqli_connect($host, $user, $pass, $databaseName); 

    // Check connection 
    if (mysqli_connect_errno($con)){ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    else{ 
    $con->query($sqlStatement); 
    header('Location: success.php'); 
    } 

我使用PHP控制檯來調試PHP文件,但在這種情況下,即使第一個日誌「在這裏!」沒有打印到控制檯,所以我想知道它是否會達到這個.php文件。無論如何,executeStatement方法中的事件success已達到,即使數據庫中沒有更改,也會打印「成功」。通過.php文件在本地服務器上執行的方式。有人有任何想法可以解決問題嗎?

在此先感謝

+0

爲什麼從javascript發送整個查詢。只需以'json'格式發送你需要的數據。 '{username:'hello',password:'world'}',在'ajax'函數中將'dataType'選項設置爲'json',然後在'PHP'中對'json'進行解碼,然後執行PHP查詢PHP文件 – ashley

+0

實際上sqlStatement變量包含「CREATE TABLE bla bla」之類的內容,它取決於用戶 – Husky

+0

哦,我的!我真希望你知道你在這裏做什麼。只允許任何SQL語句發送到後端是非常不安全的。任何能夠訪問該頁面的人都可以刪除數據庫或導出敏感數據。 – thaJeztah

回答

2

有一個在「$通」變量在PHP代碼中一個錯字:

require_once('PhpConsole.php'); 
PhpConsole::start(); 
debug('HERE!!!'); 

$sqlStatement = $_POST['sqlStatement']; 

$host = "*****"; 
$user = "*****"; 
**$pass = "*****";** 
$databaseName = "db_user_data"; 

// Create connection 
$con = mysqli_connect($host, $user, $pass, $databaseName); 

// Check connection 
if (mysqli_connect_errno($con)){ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
else{ 
    $con->query($sqlStatement); 
    header('Location: success.php'); 
} 

編輯:這是我修改後的JS代碼 - 這完全適用於我,因爲我我能夠將代碼從AJAX調用傳遞給PHP代碼並返回。試試這個:

var sqlStatement = "sqlStatement=SQLSTATEMENTHERE"; 
$.ajax({ 
    type: "POST", 
    data: sqlStatement, 
    cache: false, 
    url: "api.php", 
    success: function() 
    { 
    alert ("Success!!"); 
    } 
}); 

把你的函數和ajax調用放在外面去替換舊的。至於PHP,我會在第二時間檢查一下。

+0

這就是不是問題,我只是在用'*'替換真實信息的時候做出來的,但感謝警告! – Husky

+0

哦對,我的壞話呢! - 你介意在這裏發佈發佈的$ sqlStatement變量的典型示例嗎?這可能是問題所在。 – domo270897

+0

當然!例如像這樣:'CREATE TABLE test(TelNr1 INT(64),address CHAR(64));'。該錯誤是不是在sqlStatement,我試圖直接在phpAdmin中執行它,我工作得很好... – Husky