J'ai une simple instruction SELECT:MySQL Sélectionnez Comptez sur VARCHAR dans PERL
$sql = "SELECT count(*) FROM member_temp WHERE member_Id = '".trim($id)."'";
La colonne member_Id
est un VARCHAR (25) NOT NULL
Cela fonctionne bien jusqu'à ce que le SELECT arrive à un MEMBER_ID que a une valeur alpha derrière, comme 1126A
. Il jette alors l'erreur
Could not prepare SQL statement:SELECT count(*) FROM member_temp WHERE member_Id = '1126A'
En tant que test, je supprimer cet enregistrement et le SELECT fonctionne bien jusqu'à ce que la valeur suivante avec un A
.
Comment puis-je exécuter cette requête et traiter les enregistrements avec un caractère alphabétique?
Cela fait partie du plus grand bloc de code qui supprime les enregistrements ne se trouvent pas de la principale table membre:
while (@data = $sth->fetchrow_array()) {
my $id = $data[2];
my $pk = $data[0];
$sql = "SELECT count(*) FROM member_temp WHERE member_Id = '" . trim($id) . "'";
#print "$sql\n";
my $xth = $dbh->prepare($sql);
$xth->execute();
$cRows = $xth->fetchrow_array() || die "Could not prepare SQL statement:$sql";
#print "$cRows\n";
if ($cRows == 0) {
$sql = "DELETE FROM member WHERE sys_Id = " . $pk;
$xth = $dbh->prepare($sql);
$xth->execute();
$cnt_del++;
}
Essayez d'exécuter directement la requête dans SQL et donner la réponse –
Ce n'est pas vraiment la façon de * préparer * une requête; Pouvons-nous voir votre code? Cela ne devrait pas causer de problème du tout. Le problème se situe ailleurs –
Il se termine avec succès et renvoie une valeur de 0 –