2012-02-01 151 views
1

我準備拉我的頭髮了......PHP,請求mysql_query只是不工作

這完美的作品:

$link = mysql_connect('localhost', 'prototype_wp_usr', 'password') or die("Error: " . mysql_error()); 
mysql_select_db('prototype_wp'); 
$query = "INSERT INTO wp_zsession_capture 
     (id, session_id, user_login, first_name, last_name, user_email, phone_number, last_conviction) 
     VALUES (
      'NULL', 
      '". session_id() ."', 
      '". $_POST['user_login'] ."', 
      '". $_POST['first_name'] ."', 
      '". $_POST['last_name'] ."', 
      '". $_POST['user_email'] ."', 
      '". $_POST['phone_number'] ."', 
      '". $_POST['last_conviction'] ."' 
     )"; 

mysql_query($query) or die ('Error updating database: ' . mysql_error()); 
mysql_close($link); 

這確實工作:

$link = mysql_connect('localhost', 'prototype_wp_usr', 'password') or die("Error: " . mysql_error()); 
mysql_select_db('prototype_wp'); 
$query = "UPDATE wp_zsession_capture SET removed = 1 WHERE session_id = '$sessionid'"; 

mysql_query($query) or die ('Error updating database: ' . mysql_error()); 
mysql_close($link); 

這兩段代碼都在一個表單中......如果表單中有錯誤,則運行FIRST sql查詢以保存當前會話中的所有內容。如果沒有錯誤,並且在發生其他一些事情之後,則運行SECOND sql查詢以更新那些先前保存的條目中的「已刪除」狀態。

我一直在擺弄一百萬替代語法,我不能讓那些要更新的行。當我在phpMyAdmin中執行原始SQL時,它工作正常。沒有什麼合乎邏輯的......或者我只是非常疲倦。

供參考:$ sessionid = session_id();

- UPDATE -

我真的很感激大家的關心,但讓我處理一些事情:

  1. 是的,有我在命名錶「刪除」一欄.. 。 你是認真的嗎? :P
  2. 我當然使用session_start();
  3. 是的,我正在檢查$ sessionid,以確保它被調用。它在任何時候都在頁面上回應,並且也在我執行的任何die陳述中。
  4. FIRST查詢負責創建SECOND查詢應該更新的行...所以數據就在那裏。
  5. mysql_error()不會產生任何東西......沒有任何錯誤。

再次感謝您的關注,但到目前爲止,所有建議都已經過嘗試並再次嘗試。

enter image description here

+0

你檢查,如果$的SessionID包含一個有效的ID?如果沒有錯誤,則可能意味着數據庫中沒有匹配的行。另外:你的第一個查詢不會做輸入驗證......你好鮑比表。 – Gryphius 2012-02-01 07:16:36

+0

你在該表格中「刪除」了一列嗎? – djot 2012-02-01 07:16:43

+0

爲什麼人們不把mysql_error超出我的理解。他用它連接主機。 更糟的是,php中的書籍在其示例中使用了mysql_error。 P.s.你的代碼有sql注入漏洞。使用PDO。它不那麼困難,以後會讓你免於許多麻煩。 – itachi 2012-02-01 08:33:45

回答

9

使用mysql_error()搞亂從數據庫中獲取錯誤消息之前調用session_start(),像這樣:

mysql_query($query) or die ('Error updating database: '.mysql_error()); 

的錯誤可能是許多事情之一,比如說用戶可能沒有DELETE權限。如果您不使用mysql_error(),則無法知道發生了什麼。

編輯您session_id列中的數據看起來很可疑。檢查session_id返回的字符串有多長,並檢查數據庫中的列長。插入太長的列數據不是錯誤,但確實會裁剪數據。

+0

一次又一次地完成。沒有錯誤。 – dcolumbus 2012-02-01 08:48:58

+0

已編輯。檢查列定義 – Joni 2012-02-01 08:57:36

+0

忽略它。這是正確的長度...預覽不顯示整個字符串。請記住,我可以直接使用SQL進行更新。 – dcolumbus 2012-02-01 09:06:42

3

您是否嘗試過檢查...

  1. 當腳本調用
  2. 什麼錯誤,如果有的話,MySQL的回報$sessionid的價值是什麼?

您可以通過更改您的die()是做後者...

mysql_query($query) or die (mysql_error()); 
+0

+1不知道爲什麼沒有人看過錯誤信息:o) – deceze 2012-02-01 07:19:24

+1

我有,但沒有錯誤...這就是爲什麼。累。 – dcolumbus 2012-02-01 08:47:55

0

不知道爲什麼第二個查詢不執行。如果沒有看到數據庫表的模式,也沒有發佈服務器生成的錯誤消息的內容,那麼真的很難爲您提供幫助。但同時,我高度建議你花一點時間做一些研究SQL Injection的危害。

也可能想確保你session_id();

+1

我正在使用'session_start()'...這是第一個查詢不能正確執行。 – dcolumbus 2012-02-01 08:48:35

0

mysql_error()返回空白的一個可能原因是多個連接同時打開。在將腳本傳輸到更新的服務器/ PHP版本時,我最近遇到了這個問題。嘗試在你的通話中提供連接句柄,如下所示:mysql_error($ link)

這應該會幫助你找到錯誤,並知道這將幫助我們回答你的問題。

而且,儘管您聲明您並不擔心注入攻擊 - 您應始終使用來自用戶/可疑來源的所有數據。至少在你放入數據庫的EVERY $ _GET,$ _POST,$ _COOKIE,$ _REQUEST和$ _SERVER變量周圍使用mysql_real_escape_string()。我是指你的小鮑比表的故事...

This is what happens if you don't escape user input.

http://xkcd.com/327/

-1

取消選中您自動increament盒子放到數據庫結構,然後再檢查一遍,以節省汽車increament結構,你的問題將被解決。我在做這種錯誤時遇到這種錯誤

mysql_query($ query)or die(mysql_error());

誤差

數據庫更新失敗:汽車increatment未能通過引擎更新。

好像是發生我忽略這個錯誤複製

+0

此信息已有4年。你爲什麼在這樣一箇舊帖子中提供答案? – Option 2016-12-20 11:54:16