2017-01-23 48 views
-2

所以這個問題顯然與mysql服務器版本有關。 這個PHP函數:插入函數不會在mysql上顯示5.7

mysql_query("INSERT INTO `x_servers_pay`(`service_type`, `ip`, `time_created`, `amount`, `currency`,`receiver_email`) VALUES ('boost','".mysql_real_escape_string($ip)."','".time()."','".$price_boost."','".$currency_boost."','".$receiver_email."')"); 

完美的作品在MySQL 49年5月5日和41年5月5日,但似乎並沒有與MySQL服務器5.7的工作。還有另一個更簡單的函數,它也是INSERT的工作原理,但是那個特殊的函數並沒有,我完全沒有想到爲什麼。

我在php-fpm日誌文件夾或nginx日誌文件夾中找不到任何錯誤日誌。

任何人都可以提出建議嗎?

+2

是否介意將標題從標題中刪除?它被稱爲「大喊」,沒有人喜歡大聲喊叫;你做?你去;-)編輯:謝謝;-) –

+2

你的服務器可能不再支持mysql_ api –

+1

你檢查了'mysql_error()'?我真的建議你切換到[PDO](https://secure.php.net/manual/en/pdo.prepared-statements.php)或[mysqli](http://php.net/manual/ EN/mysqli.quickstart.prepared-statements.php)。您已經開放了SQL注入功能,並且在PHP7中刪除了mysql_ *函數,並且在以前的版本中已棄用。 – aynber

回答

1

。「謝謝你們,只是意識到我的錯誤mysql_error()未包括在字符串中現在,它給了我:字段‘time_payed’沒有默認值」

這是因爲這'".time()."'你引用一個函數,並被視爲字符串文字。

你需要做的是一個變量先分配給它:

$time = time();

然後使用在查詢中的變量。

VALUES ('boost','".mysql_real_escape_string($ip)."','$time', ... 

並且具有該列的默認值。

你也應該養成使用無論是mysqli_或PDO API(用事先準備好的聲明)。 mysql_ API已被棄用並從PHP 7開始刪除。

即使mysql_real_escape_string()已開放進行注入。

已讀取SQL injection that gets around mysql_real_escape_string()

+0

感謝您的輸入!我會考慮切換到PDO。 –

+0

@ MaximK.Magnes歡迎您使用它並提供準備好的語句。單獨使用PDO無法防止無注入的sql注入。 –

+0

@MaximK.Magnes甚至mysql_real_escape_string()是打開注射。有一個閱讀http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string –