2012-04-19 20 views
2

私は困惑しています。私はPHPとMySQLでINSERT INTOをやろうとしています。ここでPHP MySQLのINSERT INTOがエラーなしで失敗する

はphpMyAdminのに成功したSQL文、次のとおりです。ここで

INSERT INTO purchase_orders VALUES (
    DEFAULT, 
    '501', 
    '80999', 
    '149179', 
    'EB-0408898', 
    '1', 
    'Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767', 
    '294.43', 
    '4767', 
    'UPS Ground', 
    '11.61', 
    'LA', 
    'P', 
    '1', 
    '264.99', 
    DEFAULT, 
    DEFAULT 
) 

は、SQLを実行している私のPHP文です:

$sql = "INSERT INTO purchase_orders VALUES (
    DEFAULT, 
    '".mysql_real_escape_string($po_num)."', 
    '".mysql_real_escape_string($order_id)."', 
    '".mysql_real_escape_string($product_id)."', 
    '".mysql_real_escape_string($product_code)."', 
    '".mysql_real_escape_string($amount)."', 
    '".mysql_real_escape_string($product)."', 
    '".mysql_real_escape_string($price)."', 
    '".mysql_real_escape_string($mfg_code)."', 
    '".mysql_real_escape_string($shipping_method)."', 
    '".mysql_real_escape_string($shipping_cost)."', 
    '".mysql_real_escape_string($s_state)."', 
    '".mysql_real_escape_string($status)."', 
    '".mysql_real_escape_string($dist_code)."', 
    '".mysql_real_escape_string($dist_cost)."', 
    DEFAULT, 
    DEFAULT)"; 
mysql_query($sql, $dbc); 
echo mysql_errno($dbc) . ": " . mysql_error($dbc). "\n"; 

insert文が働いていない理由を私は完全に当​​惑していますPHP。どんな助けでも大歓迎です。

おかげで、私は同じ結果にも、このSQLコードを試してみました

クリスエドワーズ

...

INSERT INTO purchase_orders(po_num, order_id, product_id, product_code, amount, product, price, mfg_code, shipping_method, shipping_cost, s_state, status, dist_code, dist_cost) VALUES ('501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99') 

みんなの助けが最も高く評価された、それが何に私に素晴らしいアイデアを与えました問題は可能性があります。 InnoDBテーブルでmysql_queryを使用しようとしていて、動作しないことがわかりました。

ありがとうございました!!!

+0

mysqli/pdo_mysqlと同じか、既定のmysql拡張機能を使用できますか?テーブル構造はどうですか? $ dbcはリソースですか? – Hajo

+1

mysql_queryを呼び出す前に$ sql文をエコーし​​て、コードの一部が実際に呼び出されていることを証明できますか? – bumperbox

+0

それは私が上記のSQLコードボックスを示しているものです。 –

答えて

0

はフィールドにDEFAULTを使用しないでください:

INSERT INTO purchase_orders (<colname1>,<colname2>,.....) VALUES ('501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99') 

代わりに列に挿入値を関連付けることにより、このようにそれを使用しています。

0

デフォルト値を挿入するだけの場合は、これらの列の値をnullに設定できます。このように:

INSERT INTO purchase_orders VALUES (null, '501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99', null, null) 

データベースでは、nullを要求した列にデフォルトを設定する必要があることがわかります。

+0

INSERT INTO purchase_orders VALUES(NULL、 '501'、 '80999'、 '149179'、 'EB-0408898'、 '1'、 'トムソン・センター・バレル・アンコール26 "ステンレススチール・フルート35ウェールン4767'、 '294.43 '、' 4767 '、' UPS Ground '、' 11.61 '、' LA '、' P '、' 1 '、' 264.99 '、NULL、NULL) - phpmyadminで動作しますが、PHPを使用してもエラーは発生しません。 –

+0

フィールドにNULLが指定されていない場合にのみNULLをデフォルト値に置き換えますか? – octern

0

DBに何かを挿入できますか?あなたのコードのmysql_query($sql, $dbc);部分は機能しますか?

彼らはデフォルト値であるすべての後、あなたのテーブルにデフォルト値を挿入する必要はありません。もちろん、それはあなたのテーブル構造を思い出させるものですが、私はそれを残しておきます。

VIPINが好きなら、JAINはすべてがうまくいくはずだと提案しました。値を挿入する列を定義します。列のデータ型が整数の場合、クエリから単一引用符を除外することができます。

まだエラーメッセージは表示されません。データベース接続が正常に機能していますか?


更新。これを試して。列に名前を付けてreal_escape_string()関数を削除します。これが機能する場合は追加し、クエリを連結する前に変数をクリーンアップします。これでうまくいかない場合は、値とテーブル構造に無効な値がないか再度確認してください。 real_escape_string()機能の前後に割り当てようとしている値を$sqlにエコーします。たぶんそれは何か特有のことをしているのかもしれない。

$sql = "INSERT INTO `purchase_orders` (`column1`,`column2`,`column3`,`column4`,'"; 
$sql .= "`column5`,`column6`,`column7`,`column8`,`column9`,`column10`,"; 
$sql .= "`column11`,`column12`,`column13`,`column14`)"; 
$sql .= " VALUES ('{$po_num}','{$order_id}','{$product_id}',"; 
$sql .= "'{$product_code}','{$amount}','{$product}','{$price}',"; 
$sql .= "'{$mfg_code}','{$shipping_method}','{$shipping_cost}',"; 
$sql .= "'{$s_state}','{$status}','{$dist_code}','{$dist_cost}')"; 
+0

私は動作しますが、正常に動作する前にクエリがあります。 –

+0

@Chris更新された回答を確認してください。 –