mysql_queryの戻り値に関する質問

WBOY
リリース: 2016-06-23 13:28:24
オリジナル
845 人が閲覧しました

エラー コード

<?php/** * Created by PhpStorm. * User: Administrator * Date: 2015/8/16 * Time: 15:37 */if(!isset($_POST['name'])){    die('user name not define');}if(!isset($_POST['password'])){    die('user name not define');}if(empty($_POST['name'])){    die('user name is empty');}if(empty($_POST['password'])){    die('user password is empty');}require_once 'connect_server.php';connectdb();$name=$_POST['name'];$password=$_POST['password'];$sql="select * from users WHERE name=$name AND password=$password";$result=mysql_query($sql);$new=mysql_fetch_assoc($result);if($new['name']==$name&&$new['password']==$password){    echo "<script>alert('登陆成功');window.location='zhuye.php'</script>";}else{    echo "<script>alert('登陆失败');window.location='zhuye.html'</script>";}
ログイン後にコピー

実行可能コード
<?phprequire_once 'function.php'?><!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>所有用户</title></head><body><a href="adduser.html">添加用户</a><?php$conn=connectDb();mysql_select_db('test',$conn);$result=mysql_query("SELECT * FROM users",$conn);$dataCount=mysql_num_rows($result);echo"<table border='1'>";for($i=1;$i<$dataCount;$i++){    $result_arr=mysql_fetch_assoc($result);    $id=$result_arr['id'];    $name=$result_arr['name'];    $age=$result_arr['age'];    echo"<tr><td>$id</td><td>$name</td><td>$age</td><td><a href='edituser.php?id=$id>'>修改</a><br> <a href='deleteuser.php?id=$id>'>删除</a> </td></tr>";}echo"</table>";?></body></html>
ログイン後にコピー

2 つのコードの mysql_query の戻り値は同じですが、関数がその戻り値を呼び出すときに警告が表示されるのはなぜですか?


ディスカッションへの返信 (解決策)

"select * from users WHERE name=$name AND password=$password"
ログイン後にコピー

上記のコードには問題があります。名前とパスワードが引用符で囲まれていないため、SQL 構文エラーが発生します。最終的にはリソース タイプは返されませんが、正しいコードが返されるはずです。

"select * from users WHERE 'name'=$name AND 'password'=$password"
ログイン後にコピー


$sql="select * from users WHERE name=$name ANDpassword=$password";

次のように変更します。

$sql="select * from users WHERE name='".$name." ' AND password='".$password."' ";

$name と $password が空の場合、構文エラーが発生するためです。

まだ間違っていますか? SQL ステートメントをこれに変更してみてください。$name と $password が文字列として扱われないため、エラーが発生します。 。 。 rree

まだ間違っていますか? SQL ステートメントをこれに変更してみてください。$name と $password が文字列として扱われないため、エラーが発生します。 。 。 りー

また書き間違えてしまいました。 。 。このようにあるべきです
"select * from users WHERE 'name'=".$name." AND 'password'=".$password
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


それとも間違っていますか? SQL ステートメントをこれに変更してみてください。$name と $password が文字列として扱われないため、エラーが発生します。 。 。 りー


また書き間違えてしまいました。 。 。次のようになりますか? name=' ".$name."' AND passwd='".$password."'";

$name と $password が空の場合、構文エラーが発生するためです。

その理由を教えてもらえますか?





まだ間違っていますか? SQL ステートメントをこれに変更してみてください。$name と $password が文字列として扱われないため、エラーが発生します。 。 。 りー

また書き間違えてしまいました。 。 。これは次のようになるはずです一重引用符で囲む必要があります)

または、なぜ一重引用符と二重引用符をつなぎ合わせる必要があるのか​​知りたいですか?





まだ間違っていますか? SQL ステートメントをこれに変更してみてください。$name と $password が文字列として扱われないため、エラーが発生します。 。 。 りー



また書き間違えてしまいました。 。 。これは次のようになるはずです一重引用符で囲む必要があります)

または、なぜ一重引用符と二重引用符をつなぎ合わせる必要があるのか​​知りたいですか?

一重引用符と二重引用符を結合する理由と、... の真ん中に変数を置く必要がある理由を知りたいです。2 つのドットの役割は何ですか

$sql="select * from users WHERE name= $name AND password= $password";

数値の $name および $password 変数の場合は、SQL ステートメントで直接使用できます。文字列型の変数の場合は、一重引用符を追加する必要があります

私は分割しますコードを 3 つのセクションに分ければ理解できるはずです。 2 つのドットは文字列を接続するために使用されます。これは、ドットの後の変数が文字列であることを PHP に伝えることを意味します。

"select * from users WHERE 'name'=".$name." AND 'password'=".$password
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

"select * from users WHERE name='".$name."' AND password='".$password."'";
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

"select * from users WHERE 'name'=".$name." AND 'password'=".$password
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

つまり、各一重引用符 / 二重引用符は 2 番目の一重引用符 / 二重引用符に遭遇します。 、その文字の段落は終了します。これら 3 つの段落はすべて、二重引用符内の一重引用符で囲まれています。 。

コードを 3 つのセクションに分割しました。理解できるはずです。 2 つのドットは文字列を接続するために使用されます。これは、ドットの後の変数が文字列であることを PHP に伝えることを意味します。

"select * from users WHERE name='".$name."' AND password='".$password."'";
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

"select * from users WHERE 'name'=".$name." AND 'password'=".$password
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

"select * from users WHERE name='".$name."' AND password='".$password."'";
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

つまり、各一重引用符 / 二重引用符は 2 番目の一重引用符 / 二重引用符に遭遇します。 、その文字の段落は終了します。これら 3 つの段落はすべて、二重引用符内の一重引用符で囲まれています。 。
わかりました〜ありがとうございます

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!