Pisząc test, porównywałem ciągi. Test powrócił jako Wada. Ręcznie skopiowałem wklejony ciąg i działa ... Zwróć uwagę na składnię napisu mysql; ale do tego momentu nigdy nie dotyka mysql.Javascript odczytuje "%%" jako "%" i "%%"?
Console.logged kopia + wklej Oba Struny wyglądać następująco:
console.log(replaced);
"SELECT COUNT(*) FROM interaction WHERE ambassador_name LIKE '%' AND influencer_name = ?"
console.log(sqlQuery0);
"SELECT COUNT(*) FROM interaction WHERE ambassador_name LIKE '%' AND influencer_name = ?"
to nie powinno być w przypadku braku ale to robi. Więc chciałem zobaczyć, gdzie kończy się niepowodzeniem:
it("submits the proper first sql query", function(){
var replaced = dao.SQLquery[0].replace(/ +/g, ' ');
for (var i = 0; i < replaced.length; i++) {
if (replaced[i] != sqlQuery0[i]){
console.log(replaced.slice(i-10,i+10));
console.log(sqlQuery0.slice(i-10,i+10);
break
}
}
})
ku mojemu zdziwieniu POWYŻSZYCH WRACAJĄCY to ..
me LIKE '%' AND inf
me LIKE '%' AND infl
Nie mogą być różne długości .... rację. Spróbowałem jeszcze raz.
it("submits the proper first sql query", function(){
var replaced = dao.SQLquery[0].replace(/ +/g, ' ');
for (var i = 0; i < replaced.length; i++) {
if (replaced[i] != sqlQuery0[i]){
console.log('|'+ replaced.slice(i-10,i+10)+'|',replaced.slice(i-10,i+10).length);
console.log('|'+sqlQuery0.slice(i-10,i+10)+'|',sqlQuery0.slice(i-10,i+10).length);
break
}
}
})
I do mojego większego zaskoczenia:
|me LIKE '%' AND inf| 20
|me LIKE '%' AND infl| 20
ale pierwszy ciąg jest tylko długość 19!
Mój ostatni attampt:
var replaced = dao.SQLquery[0].replace(/ +/g, ' ');
for (var i = 0; i < replaced.length; i++) {
console.log(replaced[i], sqlQuery0[i]);
if (replaced[i] != sqlQuery0[i]){
console.log('|'+ replaced.slice(i-10,i+10)+'|',replaced.slice(i-10,i+10).length);
console.log('|'+sqlQuery0.slice(i-10,i+10)+'|',sqlQuery0.slice(i-10,i+10).length);
break
}
}
dał mi tak:
n n
a a
m m
e e
L L
I I
K K
E E
' '
% %
% '
|me LIKE '%' AND inf| 20
|me LIKE '%' AND infl| 20
Podobno "%%" jest interpretowane zarówno jako% i %% jak to może być?
więcej:
var replaced = dao.SQLquery[0].replace(/ +/g, ' ');
console.log(sqlQuery0)
for (var i = 0; i < replaced.length; i++) {
console.log(replaced[i], sqlQuery0[i]);
if (replaced[i] != sqlQuery0[i]){
console.log('|'+ JSON.stringify(replaced.slice(i-10,i+10))+'|',replaced.slice(i-10,i+10).length);
console.log('|'+ JSON.stringify(sqlQuery0.slice(i-10,i+10))+'|',sqlQuery0.slice(i-10,i+10).length);
console.log('|'+ JSON.stringify(dao.SQLquery[0].slice(i-10,i+10))+'|',sqlQuery0.slice(i-10,i+10).length);
break
}
}
|"me LIKE '%' AND inf"| 20
|"me LIKE '%' AND infl"| 20
|"ame LIKE '%' AND in"| 20
Czy możesz _pewnie_ wkleić wynik każdego wywołania 'console.log()'? Z tego, co wiemy, są niewidoczne znaki Unicode w jednym ze stringów. –
Co to jest 'sqlQuery0' w każdym z nich? Ustawiasz 'replace' na jedną rzecz, ale porównujesz ją z innym ciągiem znaków. W drugim teście mówisz "Ale pierwszy ciąg to tylko długość 19!" Który pierwszy ciąg i skąd masz 19? Drukujesz długość 20-znakowego podciągu (zakładając, że> = 10), więc oczywiście ma on 20 znaków. Jestem z @MattBall, prawdopodobnie jest 'nul' lub coś w jednym ze stringów. Może napisać funkcję, która zrzuca pozycję i kod znaku dla każdego znaku w łańcuchu, a następnie wywołuje go jednym ciągiem, a następnie drugim i porównuje wynik. – blm
Pokaż nam, co to jest 'JSON.stringify (dao.SQLquery [0])' logi – Bergi