0

この PHP/MySQL の問題を解決するのに苦労しています。私のデータベースを見せて、私の状況を説明しましょう:


テーブルを作成:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `active` varchar(20) NOT NULL,
  `activation` varchar(15) NOT NULL,
  `firstName` longtext NOT NULL,
  `lastName` longtext NOT NULL,
  `passWord` longtext NOT NULL,
  `changePassword` text NOT NULL,
  `emailAddress1` longtext NOT NULL,
  `emailAddress2` longtext NOT NULL,
  `emailAddress3` longtext NOT NULL,
  `role` longtext NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `name` (`firstName`,`lastName`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;

値を挿入します。

INSERT INTO `users` (
  `id` ,
  `active` ,
  `activation` ,
  `firstName` ,
  `lastName` ,
  `passWord` ,
  `changePassword` ,
  `emailAddress1` ,
  `emailAddress2` ,
  `emailAddress3` ,
  `role`
) VALUES (
  NULL,  '1000000000',  'abcdefghijklmno',  'John',  'Smith',  '*24D7FB97963C40FE5C56A6672F9560FC8B681508',  'on',  'john@gmail.com',  '',  '',  'User'
);

値を更新します。

$affected = mysql_query(UPDATE users SET passWord = PASSWORD('a9eb42e1b3be829ef42972ea9abab334'), changePassword = 'on' WHERE emailAddress1 = 'john@gmail.com', $dbID); 

if (mysql_affected_rows($affected)) {
    //Never runs
}

上記のUPDATEクエリは、私のスクリプト、phpMyAdmin、および MySQL ターミナルで問題なく実行されます。ただし、mysql_affected_rows($affected) 常に次のエラーが表示されます。

Warning: mysql_affected_rows() expects parameter 1 to be resource, boolean given

これはクエリが失敗したことを意味することはわかっていますが、データベースにアクセスするたびに、値が更新されていることがわかります。

関数からパラメーターを削除すると、問題が解決するように見えます。ただし、関数パラメーターとして識別子を使用するのは、何を参照しているのかを確認するためと、コードの保証のためです。

なぜこれがこれをしているのだろうか?

お時間をいただきありがとうございます。

4

2 に答える 2

5

http://php.net/mysql_query

戻り値

...

その他のタイプの SQL ステートメントの場合INSERTUPDATEDELETEDROP、 などは、成功時またはエラー時にmysql_query()戻ります。TRUEFALSE

と:

int mysql_affected_rows ([ resource $link_identifier = NULL ] )

これはmysql_affected_rows、引数として mysql 接続リソースが必要であることを意味します。の結果ではなく、その結果がまたはmysql_queryのみである場合は、間違いなくそうではありません。次のように使用します。truefalse

$successful = mysql_query('UPDATE ...'); 

if ($successful) {
    echo 'Affected rows: ' . mysql_affected_rows();
} else {
    echo 'Fail: ' . mysql_error();
}
于 2012-06-26T06:54:08.927 に答える
1

変化する:

$affected = mysql_query(UPDATE users SET passWord = PASSWORD('a9eb42e1b3be829ef42972ea9abab334'), changePassword = 'on' WHERE emailAddress1 LIKE 'john@gmail.com', $dbID);

そして実行

于 2012-06-26T06:54:30.870 に答える