我这里有一个奇怪的问题。我已经试图找出问题所在好几个小时了。我有一个函数应该会更新我的数据库中的表,并将“date_vente”(英文为 date_sold)设置为 NOW()。查询非常简单,但它一直报告匹配到 1 行,但未更改任何数据。问题是,数据应该被更改。如果我手动运行查询,它就可以正常工作,但如果我从 PHP 应用程序运行它,则失败...
问题在于应将一个名为“baskets”的表写入一个NOW值,但它没有这样做。不是因为连接错误,函数刚刚使用了相同的连接ID(已var_dumped),它们都具有相同的ID,连接仍然是打开状态,我正在尝试更新的列中有一个“0000-00-00 00:00:00”的值... 是否可以给我一些更多的提示?谢谢。
现在两个更新都起作用了...我尝试进行验证、修复和优化以查看是否存在损坏问题,但没有任何改变...
//Marque le panier comme vendu
$sqlstring = "UPDATE ".$prefix_tables_panier."paniers SET date_vente = NOW() WHERE no_panier = ".$data_panier["no_panier"];
$result = mysql_query($sqlstring, $conn_panier);
echo $sqlstring.'<br>';
echo mysql_affected_rows($conn_panier); echo '<br>';
echo mysql_error($conn_panier); echo '<br>';
echo mysql_errno($conn_panier); echo '<br>';
var_dump($conn_panier); echo '<br>';
var_dump(mysql_error($conn_panier)); echo '<br>';
var_dump(mysql_info($conn_panier)); echo '<br>';
var_dump(mysql_stat($conn_panier)); echo '<br>';
输出结果如下:
UPDATE panier_paniers SET date_vente = NOW() WHERE no_panier = 840
0
0
resource(5) of type (mysql link)
string(0) ""
string(40) "Rows matched: 1 Changed: 0 Warnings: 0"
string(145) "Uptime: 1640423 Threads: 5 Questions: 39673341 Slow queries: 0 Opens: 1132 Flush tables: 1 Open tables: 235 Queries per second avg: 24.185" 7
问题在于应将一个名为“baskets”的表写入一个NOW值,但它没有这样做。不是因为连接错误,函数刚刚使用了相同的连接ID(已var_dumped),它们都具有相同的ID,连接仍然是打开状态,我正在尝试更新的列中有一个“0000-00-00 00:00:00”的值... 是否可以给我一些更多的提示?谢谢。
UPDATE panier_paniers SET date_vente = NOW() WHERE no_panier = 840
0
0
resource(5) of type (mysql link)
string(0) ""
string(40) "Rows matched: 1 Changed: 0 Warnings: 0"
string(145) "Uptime: 1641927 Threads: 5 Questions: 39681590 Slow queries: 0 Opens: 1132 Flush tables: 1 Open tables: 235 Queries per second avg: 24.168"
UPDATE panier_paniers SET date_vente = "2011-12-28 12:00:17" WHERE no_panier = 840
1
0
resource(5) of type (mysql link)
string(0) ""
string(40) "Rows matched: 1 Changed: 1 Warnings: 0"
string(145) "Uptime: 1641927 Threads: 5 Questions: 39681591 Slow queries: 0 Opens: 1132 Flush tables: 1 Open tables: 235 Queries per second avg: 24.168"
go
这变得很奇怪,非常非常奇怪!
更新 #2
CREATE TABLE IF NOT EXISTS `panier_paniers` (
`no_panier` bigint(20) unsigned NOT NULL auto_increment,
`client_prenom` varchar(100) NOT NULL default '',
`client_nom` varchar(100) NOT NULL default '',
`client_entreprise` varchar(150) default NULL,
`client_adresse` varchar(150) NOT NULL default '',
`client_ville` varchar(150) NOT NULL default '',
`client_province_etat` char(2) default NULL,
`client_pays` char(2) NOT NULL default '',
`client_code_postal_zip` varchar(15) NOT NULL default '',
`client_telephone` varchar(20) NOT NULL default '',
`client_type_telephone` enum('domicile','travail','cellulaire') NOT NULL default 'domicile',
`client_telecopieur` varchar(20) default NULL,
`client_courriel` varchar(150) NOT NULL default '',
`client_mailinglist_from` datetime default NULL,
`client_langue` char(2) NOT NULL default '',
`client_no_client` bigint(20) unsigned default NULL,
`expedition_mode` varchar(20) NOT NULL default '',
`expedition_no_livraison` bigint(20) unsigned default NULL,
`expedition_produit` varchar(100) default NULL,
`expedition_produit_no_compte` varchar(100) default NULL,
`expedition_frais_livraison` decimal(10,2) NOT NULL default '0.00',
`expedition_frais_manut` decimal(10,2) NOT NULL default '0.00',
`expedition_assurance` char(1) NOT NULL default 'X',
`expedition_signature` char(1) NOT NULL default 'X',
`expedition_conf_livraison` char(1) NOT NULL default 'X',
`expedition_emballage` text,
`expedition_no_suivi` varchar(100) default NULL,
`expedition_prenom` varchar(100) default NULL,
`expedition_nom` varchar(100) default NULL,
`expedition_entreprise` varchar(150) default NULL,
`expedition_adresse` varchar(150) default NULL,
`expedition_ville` varchar(150) default NULL,
`expedition_province_etat` char(2) default NULL,
`expedition_pays` char(2) default NULL,
`expedition_code_postal_zip` varchar(15) default NULL,
`expedition_telephone` varchar(20) default NULL,
`expedition_type_telephone` enum('domicile','travail','cellulaire') NOT NULL default 'domicile',
`expedition_exporte_ups_connect` char(1) NOT NULL default '',
`expedition_mis_a_jour_ups_connect` char(1) NOT NULL default '',
`paiement_mode` varchar(20) NOT NULL default '',
`paiement_no_paiement` bigint(20) unsigned default NULL,
`paiement_numero_taxe_fed` bigint(20) unsigned NOT NULL default '0',
`paiement_numero_taxe_prov` bigint(20) unsigned NOT NULL default '0',
`paiement_numeros_taxes_speciales` varchar(255) NOT NULL,
`paiement_numero_po` varchar(20) default NULL,
`paiement_numero_bon` varchar(20) default NULL,
`paiement_cc_pa_trnid` varchar(10) default NULL,
`paiement_cc_pa_montant` decimal(10,2) NOT NULL default '0.00',
`paiement_cc_capture` text,
`paiement_desjardins_TxID` varchar(25) default NULL,
`paiement_desjardins_date_envoi` datetime NOT NULL default '0000-00-00 00:00:00',
`date_creation` datetime NOT NULL default '0000-00-00 00:00:00',
`ip_creation` varchar(15) NOT NULL default '',
`host_creation` varchar(255) default NULL,
`date_vente` datetime NOT NULL default '0000-00-00 00:00:00',
`date_annulee` datetime NOT NULL default '0000-00-00 00:00:00',
`date_completee` datetime NOT NULL default '0000-00-00 00:00:00',
`date_inventaire` datetime NOT NULL default '0000-00-00 00:00:00',
`date_acceptation` datetime NOT NULL default '0000-00-00 00:00:00',
`note` text,
`note_client` text,
`no_utilisateur` bigint(20) unsigned default NULL,
PRIMARY KEY (`no_panier`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=841 ;
更新 #3
好的,看这个可怕的东西:
//Marque le panier comme vendu
$sqlstring = 'UPDATE panier_paniers SET date_vente = NOW() WHERE no_panier = '.$data_panier["no_panier"];
$result = mysql_query($sqlstring, $conn_panier);
echo $sqlstring.'<br>';
echo mysql_affected_rows($conn_panier); echo '<br>';
echo mysql_error($conn_panier); echo '<br>';
echo mysql_errno($conn_panier); echo '<br>';
var_dump($conn_panier); echo '<br>';
var_dump(mysql_error($conn_panier)); echo '<br>';
var_dump(mysql_info($conn_panier)); echo '<br>';
var_dump(mysql_stat($conn_panier)); echo '<br>';
$sqlstring='UPDATE panier_paniers SET date_vente = "2011-12-28 10:09:12" WHERE no_panier = '.$data_panier["no_panier"];
mysql_query($sqlstring, $conn_panier);
echo $sqlstring.'<br>';
echo mysql_affected_rows($conn_panier); echo '<br>';
echo mysql_error($conn_panier); echo '<br>';
echo mysql_errno($conn_panier); echo '<br>';
var_dump($conn_panier); echo '<br>';
var_dump(mysql_error($conn_panier)); echo '<br>';
var_dump(mysql_info($conn_panier)); echo '<br>';
var_dump(mysql_stat($conn_panier)); echo '<br>';
如您所见,这两种方法都是有效的,第一种不会更新任何内容,第二种会更新该行。请交换位置并再次进行测试:
$sqlstring='UPDATE panier_paniers SET date_vente = "2011-12-28 10:09:12" WHERE no_panier = '.$data_panier["no_panier"];
mysql_query($sqlstring, $conn_panier);
echo $sqlstring.'<br>';
echo mysql_affected_rows($conn_panier); echo '<br>';
echo mysql_error($conn_panier); echo '<br>';
echo mysql_errno($conn_panier); echo '<br>';
var_dump($conn_panier); echo '<br>';
var_dump(mysql_error($conn_panier)); echo '<br>';
var_dump(mysql_info($conn_panier)); echo '<br>';
var_dump(mysql_stat($conn_panier)); echo '<br>';
//Marque le panier comme vendu
$sqlstring = 'UPDATE panier_paniers SET date_vente = NOW() WHERE no_panier = '.$data_panier["no_panier"];
$result = mysql_query($sqlstring, $conn_panier);
echo $sqlstring.'<br>';
echo mysql_affected_rows($conn_panier); echo '<br>';
echo mysql_error($conn_panier); echo '<br>';
echo mysql_errno($conn_panier); echo '<br>';
var_dump($conn_panier); echo '<br>';
var_dump(mysql_error($conn_panier)); echo '<br>';
var_dump(mysql_info($conn_panier)); echo '<br>';
var_dump(mysql_stat($conn_panier)); echo '<br>';
结果:
UPDATE panier_paniers SET date_vente = "2011-12-28 10:09:12" WHERE no_panier = 840
1
0
resource(5) of type (mysql link)
string(0) ""
string(40) "Rows matched: 1 Changed: 1 Warnings: 0"
string(145) "Uptime: 1643141 Threads: 5 Questions: 39713580 Slow queries: 0 Opens: 1286 Flush tables: 1 Open tables: 219 Queries per second avg: 24.169"
UPDATE panier_paniers SET date_vente = NOW() WHERE no_panier = 840
1
0
resource(5) of type (mysql link)
string(0) ""
string(40) "Rows matched: 1 Changed: 1 Warnings: 0"
string(145) "Uptime: 1643141 Threads: 5 Questions: 39713581 Slow queries: 0 Opens: 1286 Flush tables: 1 Open tables: 219 Queries per second avg: 24.169"
现在两个更新都起作用了...我尝试进行验证、修复和优化以查看是否存在损坏问题,但没有任何改变...
SET date_vente='2011-12-28 12:00:00'
这样的日期字符串时会发生什么? - VolkerKSYSDATE()
或Curdate()
而不是Now()
时会发生什么?通过 php 和 heidisql 执行查询语句"SELECT Now() as now, date_vente FROM panier_paniers WHERE no_panier=840"
的结果是什么? - VolkerK