2017-10-01 10 views
-3

私はまったくPHPの初心者です。PHPとMySQLのデータベースに変数を挿入しようとしています。 これは私のコードです:php + mysqlのデータベースに変数を挿入する

$link = mysql_connect('localhost','','','onlynews') or die('Cannot connect to the DB'); 
mysql_select_db('TEST',$link) or die('Cannot select the DB'); 

$strSQL = "INSERT INTO news(id, title,photo,url,source, at) VALUES('$x','$title','$url','$imgurl ','$source','$at')"; 

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

問題は、それはやっていないです。何も!エントリはまったくありません。データベースに変更はありません。

- これはどのように修正できますか?

- 変数がユーザーからではなくAPIからのものであっても、SQLインジェクションを防ぐコードを記述する必要がありますか?

+3

$ sqlを文字列に設定するだけです。 mysqliを使って実際にクエリを実行する必要があります。また、SQLインジェクションのハッキングから安全なように、クエリの準備やパラメータ化されたクエリの使用を検討する必要があります。値を直接クエリ文字列に連結するのは非常に危険です。 – JimL

+0

投稿を編集しました。更新情報をお読みください。 –

+0

ローカル開発環境でエラー報告が有効になっていますか?どのPHPバージョンを使用していますか?すべてのmysql_ *関数はPHP 7で削除されているので、 – JimL

答えて

1

$conn->query($sql);を使用してクエリを実行する必要があります。

しかし、SQLインジェクションを避けるには、prepared statementsまたは少なくとも$conn->real_escape_string()を使用してSQL文の値をエスケープする必要があります。

例えば、これは、プリペアドステートメントを使用してコードです:

$servername = "localhost"; 
$username = ""; 
$password = ""; 
$dbname = "onlynews"; 
$tableName = "news"; 
$conn = new mysqli($servername, $username, $password, $dbname); 
$stmt = $conn->prepare("INSERT INTO news (id, title, photo, url, source, at) 
         VALUES (?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('ssssss', $thetitle, $urlToImage, $theurl, $thesource, $thetime); 
$stmt->execute(); 
$stmt->close(); 

$conn->prepare()$stmt->execute()が失敗(とfalseを返す)ことがあるのであなたはまた、いくつかのエラーチェックを追加する必要があります。もちろん、$connの構築中にデータベースへの接続を確立することもできません。これは、$conn->connect_errorを使用して確認できます。

+0

投稿を編集しました。更新情報をお読みください。 –