こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

php+mysql

Warning: mysql_query() expects parameter 1 to be string, resource given in C:\xampp\htdocs\phptest\test6.php on line 30
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in C:\xampp\htdocs\phptest\test6.php on line 32
このようなエラーが出てしまいます
line30 $res = mysql_query($link,$query);
line32 while($row = mysql_fetch_assoc($res)) {

戻り値がおかしいのでしょうか?
下の分の falseを使っているところが問題なんでしょうか?
<?php
$link = mysql_connect('localhost','ogawa','taku1106','ogawa');
if ( $link !==false) {
$msg ='';
$err_msg ='';
if ( isset( $_POST['send'] )=== true) {
$subject =$_POST['subject'];
$honbun =$_POST['honbun'];
if ( $subject !=='' && $honbun !=='' ) {
$query = " INSERT INTO ogawa ( "
."subject,"
."honbun,"
.") VALUES ( "
. "'" . mysqli_real_escape_string( $link, $subject ) ."', "
. "'" . mysqli_real_escape_string( $link, $honbun ) . "'"
." ) ";
$kakikomi = date('Y-m-d h:i:s');
$res = mysqli_query($link,$query);
if ($res !==false) {
$msg = '書き込みに成功しました。';
}else{
$err_msg = '書き込みに失敗しました。';
}
}else{
$err_msg = 'タイトルと本文を書き込んで下さい。';
}
}

$query = "SELECT id,subject,honbun,kakikomi FROM ogawa";
$res = mysql_query($link,$query);
$data = array();
while($row = mysql_fetch_assoc($res)) {
array_push($data,$row);
}
arsort($data);
}else{
echo"データベースの接続に失敗しました";
}
mysql_close($link);
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF8;" />
</head>
<body>>
<table border="1">
<form action="test6.php" method="POST">
<tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr>
<tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea>
<tr><td><input type="submit" value="保存 する" /></td><tr>
</table>
</form>
<?php
if ($msg !=='')echo'<p>'.$msg.'</p>';
if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>';
foreach($data as $key =>$val) {
echo $val['subject'].''.$val['honbun'].'<br>';
}
?>
</body>
</html>

投稿日時 - 2017-05-08 17:20:44

QNo.9326819

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>$res = mysql_query($link,$query);

mysql_queryの引数はSQLの文字列とMySQL接続(リソース:省略可)です。順番が逆ですね(文字列があるべきところにリソースがあるのでエラーだとエラーメッセージにも書いてあります)。

http://php.net/manual/ja/function.mysql-query.php

なお、mysqlI_queryでは引数の順番がMySQLi接続のリソース(省略不可)、SQL文字列の順です。逆になります。

http://php.net/manual/ja/mysqli.query.php


接続はmysql_connectなのに、mysqli_real_escape_stringとかmysqli_queryが混在しています。
MySQL関数で書いていたものを(MySQL関数が非推奨の古いものなので)急遽MySQLi関数に書き直したのだろうと推測しますが、ソースを「mysql_」で検索して全部「mysqli_」に修正されているか、引数の順序は問題ないかをチェックしないといけません。


いっそPDOで書き直すべきです。プレースホルダを使えばエスケープが格段に楽になります(エスケープ漏れの心配がなくなる)。

投稿日時 - 2017-05-11 08:01:05