我在php和mysql中编写了以下内容:
void test_is_male()
{
person* test_person= (person*)malloc(sizeof(person));
test_person->sex = 'M';
CU_ASSERT(is_male(test_person));
test_person->sex = 'F';
CU_ASSERT_FALSE(is_male(test_person));
}
void test_is_female()
{
person* test_person= (person*)malloc(sizeof(person));
test_person->sex = 'F';
CU_ASSERT(is_female(test_person));
test_person->sex = 'M';
CU_ASSERT_FALSE(is_female(test_person));
}
void test_is_surname_AL()
{
person* test_person= (person*)malloc(sizeof(person));
strcpy(test_person->surname, "ARSENE");
CU_ASSERT(is_surname_AL(test_person));
strcpy(test_person->surname, "PI");
CU_ASSERT_FALSE(is_surname_AL(test_person));
}
void test_is_surname_MZ()
{
person* test_person= (person*)malloc(sizeof(person));
strcpy(test_person->surname, "MINE");
CU_ASSERT(is_surname_MZ(test_person));
strcpy(test_person->surname, "ISHIKAWA");
CU_ASSERT_FALSE(is_surname_MZ(test_person));
}
void test_read_person(){
char* argv;
int argc;
FILE* ptr_test_opeople = fopen(argv[1], "r");
person* p = read_person(ptr_test_opeople);
fclose(ptr_test_opeople);
CU_ASSERT_STRING_EQUAL(p->surname, "TOPO");
CU_ASSERT_STRING_EQUAL(p->name, "LINO");
CU_ASSERT_STRING_EQUAL(p->birth_date, "01/02/1903");
CU_ASSERT_STRING_EQUAL(p->birth_place, "ROMA");
CU_ASSERT_STRING_EQUAL(p->sex, "M");
CU_ASSERT_STRING_EQUAL(p->cf, "/0");
}
/*
* Funzioni di inizializzazione e pulizia delle suite.
* Di default sono funzioni vuote.
*/
int init_suite_default(void) {
return 0;
}
int clean_suite_default(void) {
return 0;
}
/* **************************************************
* TEST di UNITA'
*/
int main() {
/* inizializza registro - e' la prima istruzione */
CU_initialize_registry();
/* Aggiungi le suite al test registry */
CU_pSuite pSuite_FILTER_TEST = CU_add_suite("Suite_FILTER",
init_suite_default, clean_suite_default);
CU_pSuite pSuite_B = CU_add_suite("Suite_B", init_suite_default, clean_suite_default);
/* Aggiungi i test alle suite
* NOTA - L'ORDINE DI INSERIMENTO E' IMPORTANTE
*/
CU_add_test(pSuite_FILTER_TEST, "test of is_male", test_is_male);
CU_add_test(pSuite_FILTER_TEST, "test of is_female", test_is_female);
CU_add_test(pSuite_FILTER_TEST, "test of is_surname_AL", test_is_surname_AL);
CU_add_test(pSuite_FILTER_TEST, "test of is_surname_MZ", test_is_surname_MZ);
CU_add_test(pSuite_B, "test of read_person", test_read_person);
/* Esegue tutti i casi di test con output sulla console */
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
/* Pulisce il registro e termina lo unit test */
CU_cleanup_registry();
return CU_get_error();
}
问题是,当$ id的值是,例如:100abcd时,查询仍然会提取,而不应该提取,因为没有像这样的id,但是它获取了id 100。
为什么会这样?感谢。
答案 0 :(得分:4)
它是从字符串到int的隐式转换 - 它相当于id = CAST(' 100abcd' AS unsigned);
> SELECT CAST('100abcd' AS UNSIGNED);
+-----------------------------+
| CAST('100abcd' AS UNSIGNED) |
+-----------------------------+
| 100 |
+-----------------------------+