2012-06-25 54 views
1

我一直在嘗試幾天以獲得適當的格式,以執行我想要的內容。插入到SQL語句中所需的PHP變量

目標是將行插入到先前創建的MYSQL表中。該表可能是字符串和整數的混合,正如我們所知,MYSQL需要在字符串周圍插入引號來進行插入,而不是整數。那麼,正確的方式來插入一個整數和兩個字符串表中的東西將是:

insert into table values(number, "string", "string"); 

我希望值是PHP變量。但是,當我輸入變量時,當我檢入MYSQL時,代碼將不再生成結果。該表將被創建,但它將是空的。所以一定是這個聲明不起作用。

這是我的功能實際的代碼,將其插入:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) 

    $insert = "INSERT INTO ".$new_table. " VALUES (1,'Partner','Merchant')"; 

    $q = mysqli_query($db, $insert); 

它的工作原理是這樣的,但填滿了1,尋找合作伙伴和商人整個表的每一行多次我選擇。

我也試過幾個變化這樣

function insertRow($db, $new_table, $ID, $Partner, $Merchant) 

    $insert = "INSERT INTO ".$new_table. " VALUES(" .$ID. "," ."'$Partner'". ","."'$Merchant'".")"; 

    $q = mysqli_query($db, $insert); 

我也嘗試這些:

Passing PHP variables into MySQL

但都沒有工作實際表插入行。

有沒有人有這樣做的另一種方式?

+1

是否有您沒有使用[準備好的陳述](http://php.net/manual/en/mysqli.prepare.php)的具體原因? – PeeHaa

+1

你從數據庫中得到了錯誤信息嗎?它會告訴你問題是什麼。 – andrewsi

+0

您可以嘗試echo $ insert,然後直接在phpmyadmin中執行它。一定要檢查mysqli_query返回的值,如果它是false,打印$ mysqli-> error以獲得有關錯誤的更多信息 – Mathieu

回答

1

你需要開始你的調試非常簡單,並從那裏工作。我的第一個猜測是,你沒有正確設置你的參數值傳遞給函數。

試試這個:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) { 
    $ID=1; 
    $Partner = 'Partner'; 
    $Merchant = 'Merchant'; 
    $insert = "INSERT INTO $new_table " . 
    " VALUES($ID,'$Partner','$Merchant')"; 
    $q = mysqli_query($db, $insert); 
    if (!$q) die(mysqli_error($db)); 
} 

運作的?如果是這樣,那麼問題是您的參數值沒有正確設置。

請注意,我還添加了一些錯誤報告在那裏;-)

但是請注意,這不是要創建這樣的SQL是一個好主意。它對SQL注入是開放的。使用Prepared Statements更好地研究:

$prep = mysqli_prepare($db, "insert into " . $new_table . " values (?,?,?)"); 
    $prep->bind_param("iss", $ID, $Partner, $Merchant); 
    $prep->execute(); 

有關更多詳細信息,請參閱PHP documentation on mysqli_prepare

+0

我試着用你的第二位,它似乎也沒有工作。 – GK1667

+0

那麼,讓我們從第一位開始(設置參數值) - 這是否奏效? – craigmj

+0

是的。謝謝!我對其他位也很感興趣,使它更安全一點,看起來不錯。 – GK1667

0

您的INSERT查詢看起來非常接近。我相信,您的問題可能沒有從終止的SQL語句就出來了:

$insert = "INSERT INTO " . $new_table . 
    " VALUES(" . $ID . ", '$Partner', '$Merchant');"; 

注意額外的分號(;),關閉SQL語句。

0

PHP有一個功能,允許您將變量放入雙引號字符串中。嘗試運行查詢:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) 
    $insert = "INSERT INTO $new_table VALUES ($ID,'$Partner','$Merchant');"; 
    $q = mysqli_query($db, $insert); 

這樣做的原因是PHP解析雙引號字符串以執行變量替換。

0

嘗試使用PDO準備的語句。它使參數簡單:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) { 
    $host = 'host'; 
    $user = 'user'; 
    $password = 'password'; 
    $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $password); 
    $sql = "INSERT INTO $new_table VALUES (:id, :partner, :merchant)"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->bindValue(':id', $ID); 
    $stmt->bindValue(':partner', $Partner); 
    $stmt->bindValue(':merchant', $Merchant); 
    $result = $stmt->execute() || die(var_dump($stmt->errorInfo())); 
} 

這裏,$ ID,$合作伙伴,和$商家會自動逃過一劫,但您可能需要以避免SQL注入逃跑$ NEW_TABLE。