Avatar billede skeleton Nybegynder
28. november 2003 - 14:55 Der er 54 kommentarer og
1 løsning

c og mysql

Hej E

jeg har fundet
-------------------------------------------------
#include <mysql.h> /* Headers for MySQL usage */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static MYSQL demo_db;

int main(int argc, char **argv){
  int insert_id;
  char *encdata, *query;
  int datasize;
  MYSQL_RES *res; /* To be used to fetch information into */
  MYSQL_ROW row;

  if(argc<2){
    printf("Please supply a string for insertion into the database\n");
    exit(0);
  }

  if(!mysql_connect(&demo_db, "192.168.1.15", "bob", "")){
/* Make connection with mysql_connect(MYSQL db, char *host, char *username, char *password */
    printf(mysql_error(&demo_db));
    exit(1);
  }

  if(mysql_select_db(&demo_db, "demodb")){ /* Select the database we want to use */
    printf(mysql_error(&demo_db));
    exit(1);
  }

  encdata=malloc(strlen(argv[1])+1);
/* Create a buffer to write our slash-encoded data int; it must be at least twice
the size of the input string plus one byte for the null terminator */
  datasize=mysql_real_escape_string(&demo_db, encdata, argv[1], strlen(argv[1])); /* Escape any MySQL-unsafe characters */
  query=malloc(datasize+255); /*Make sure we have enough space for the query */
  sprintf(query, "INSERT INTO demotable(demodata) VALUES('%s')", encdata); /* Build query */
  if(mysql_real_query(&demo_db, query, strlen(query)+255)){ /* Make query */
    printf(mysql_error(&demo_db));
    exit(1);
  }
  free(query);

  insert_id=mysql_insert_id(&demo_db); /* Find what id that data was given */

  query=malloc(255);
  sprintf(query, "SELECT demodata FROM demotable WHERE id='%d'", insert_id);
  if(mysql_real_query(&demo_db, query, 255)){ /* Make query */
    printf(mysql_error(&demo_db));
    exit(1);
  }

  res=mysql_store_result(&demo_db); /* Download result from server */
  row=mysql_fetch_row(res); /* Get a row from the results */
  printf("You inserted \"%s\".\n", row[0]);
  mysql_free_result(res); /* Release memory used to store results. */
  mysql_close(&demo_db);

  return 0;
}
-----------------------------------------------------

på nettet.

men kan ikke få det compilet/linket.

[root@dell c]# gcc -Wall -c my.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
gcc: -lmysqlclient: linker input file unused because linking not done

[root@dell c]# gcc -o my my.o -lm
my.o(.text+0x45): In function `main':
: undefined reference to `mysql_connect'
my.o(.text+0x59): In function `main':
: undefined reference to `mysql_error'
my.o(.text+0x81): In function `main':
: undefined reference to `mysql_select_db'
my.o(.text+0x95): In function `main':
: undefined reference to `mysql_error'
my.o(.text+0xf4): In function `main':
: undefined reference to `mysql_real_escape_string'
my.o(.text+0x14b): In function `main':
: undefined reference to `mysql_real_query'
my.o(.text+0x15f): In function `main':
: undefined reference to `mysql_error'
my.o(.text+0x190): In function `main':
: undefined reference to `mysql_insert_id'
my.o(.text+0x1d4): In function `main':
: undefined reference to `mysql_real_query'
my.o(.text+0x1e8): In function `main':
: undefined reference to `mysql_error'
my.o(.text+0x20b): In function `main':
: undefined reference to `mysql_store_result'
my.o(.text+0x21c): In function `main':
: undefined reference to `mysql_fetch_row'
my.o(.text+0x242): In function `main':
: undefined reference to `mysql_free_result'
my.o(.text+0x252): In function `main':
: undefined reference to `mysql_close'
collect2: ld returned 1 exit status


Hvad er der galt her....
Avatar billede arne_v Ekspert
28. november 2003 - 15:07 #1
-c  betyder "lad være med at linke"

undlad den
Avatar billede arne_v Ekspert
28. november 2003 - 15:09 #2
Altså enten:

gcc -Wall my.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient

eller:

gcc -Wall -c my.c -I/usr/include/mysql
gcc -o my my.o -L/usr/lib/mysql -lm -lmysqlclient
Avatar billede skeleton Nybegynder
28. november 2003 - 15:17 #3
Takker.

Du er sku god til det her..
Avatar billede skeleton Nybegynder
28. november 2003 - 15:54 #4
men hov du bruger da -c i det nederste eksempel.

kan ikke compile hvis den ikke er der..

får også segmentation fault

i denne:
  if(mysql_real_query(&demo_db, query, strlen(query)+255)){ /* Make query */
    printf(mysql_error(&demo_db));
    exit(1);
  }
Avatar billede arne_v Ekspert
28. november 2003 - 16:12 #5
Ja fordi der linker jeg jo i den anden linie (hvor -L og -l er)
Avatar billede arne_v Ekspert
28. november 2003 - 16:16 #6
Jeg tror at du skal kalde med:

mysql_real_query(&demo_db, query, strlen(query)))
Avatar billede arne_v Ekspert
28. november 2003 - 16:16 #7
Jeg har iøvrigt et fungerende eksempel her:

#include <stdio.h>
#include <stdlib.h>

#include "mysql.h"

int main()
{
    MYSQL *handle;
    MYSQL_RES *result;
    MYSQL_ROW row;
    int nfields;
    int *l;
    int i;
    handle= mysql_init(NULL);
    if(handle == NULL)
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    if(!mysql_real_connect(handle, "localhost", "", "", "Test", 0, NULL, 0))
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    mysql_query(handle, "SELECT * FROM T1");
    result = mysql_store_result(handle);
    nfields = mysql_num_fields(result);
    while ((row = mysql_fetch_row(result))) {
        l = (int *)mysql_fetch_lengths(result);
        for (i=0; i<nfields; i++) {
            printf(" %.*s", l[i], row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }
    mysql_free_result(result);
    mysql_close(handle);
    return 0;
}
Avatar billede skeleton Nybegynder
28. november 2003 - 17:27 #8
har fået dit eks. til at virke.

hvad nu hvis jeg ønsker at indsætte data.
Tabel test
      id - auto increment
      navn - varchar(32)

mysql_query(handle, "INSERT INTO incident(test) VALUES ('NULL', 'test')");
Avatar billede skeleton Nybegynder
28. november 2003 - 17:31 #9
database navn: incident
tabel navn: test
Avatar billede arne_v Ekspert
28. november 2003 - 18:35 #10
Det må ihvertfald være:

"INSERT INTO incident(test) VALUES ('test')"
Avatar billede arne_v Ekspert
28. november 2003 - 18:39 #11
Vrøvl.

"INSERT INTO incident(navn) VALUES ('test')"
Avatar billede skeleton Nybegynder
29. november 2003 - 01:31 #12
kan ikke få insert til at virke med auto_increment

DB:
id: auto_increment
from: varchar[100]
subject: varchar[100]
date: varchar[100]

INSERT INTO email VALUES ('NULL', 'f_test1', 's_test1', 'd_test1')

hvis man ikke må skrive 'NULL', hvad skal man så skrive??
sætningen virker fint hvis jeg giver id en værdi eg. 2...
Avatar billede skeleton Nybegynder
29. november 2003 - 01:36 #13
og hvad hvis man vil sætte variable ind???

int id = 6;

"insert into email values( id, 'bla', 'bla', 'bla')"

hvordan gøres id til variablen id inde i "" istedet for tekst ??????
Avatar billede arne_v Ekspert
29. november 2003 - 01:37 #14
Prøv med:

INSERT INTO email (from, subject, date) VALUES ('f_test1', 's_test1', 'd_test1')
Avatar billede arne_v Ekspert
29. november 2003 - 01:39 #15
Du bliver hurtigt glad for sprintf !

char sqlcmd[1000];
int iv;
char sv1[100],sv2[100],sv3[100];
...
sprintf(sqlcmd,"insert into email values( %d, '%s', '%s', '%s')",iv,sv1,sv2,sv3);
Avatar billede skeleton Nybegynder
29. november 2003 - 01:49 #16
hvad bliver der af mysql_query???

hvad gør sprint -> printf ???
Avatar billede skeleton Nybegynder
29. november 2003 - 01:51 #17
char from[100] = "test1";
char subject[100] = "test1";
char date[100] = "test1";

if(!mysql_query(handle, "INSERT INTO email VALUES (****, from[], subject[], date [])")) {
***print error
}
Avatar billede skeleton Nybegynder
29. november 2003 - 01:52 #18
hvordan bruges sprint inde i IF ??
Avatar billede Henrik_B Novice
29. november 2003 - 08:15 #19
Arne :

Jeg har kopieret dit eksempel fra kl. 16:16 ind i CBuilder 4 og kompileret. Jeg får følgende fejl :
[Linker Error] Unresolved external 'mysql_init' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_real_connect' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_error' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_query' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_store_result' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_num_fields' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_fetch_lengths' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_fetch_row' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_free_result' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.
[Linker Error] Unresolved external 'mysql_close' referenced from D:\PROJECTS\C++ BUILDER\MYSQL TEST\MYSQLTEST.OBJ.

Hvad gør jeg fejl ?
Avatar billede arne_v Ekspert
29. november 2003 - 11:11 #20
sprintf putter ind i sqlcmd variablen.

Altså;

sprintf(sqlcmd,"insert into email values( %d, '%s', '%s', '%s')",iv,sv1,sv2,sv3);
mysql_qyery(handle, sqlcmd);
Avatar billede arne_v Ekspert
29. november 2003 - 11:14 #21
fs>

Mit eksempler builder med BCB 5.5 command line med:

coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib
bcc32 -DSOCKET=int -I\mysql\include mysqltest.c libmysql.lib

SÅ du skal have konverteret lib og have include dir og lib sat i build.
Avatar billede skeleton Nybegynder
30. november 2003 - 00:54 #22
*
Created        14-11-2003
Modified        29-11-2003
Project       
Model       
Company       
Author       
Version       
Database        mySQL 4.0
*/



Create table Kunde (
    kunde_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    post_nr Int UNSIGNED NOT NULL ,
    firmanavn Varchar(30) NOT NULL ,
    vejnavn Varchar(50) NOT NULL ,
    telefon Int UNSIGNED NOT NULL ,
    mobil Int UNSIGNED ,
    fax Int UNSIGNED ,
    email Varchar(50) NOT NULL ,
    password Varchar(32) NOT NULL ,
Primary Key (kunde_id)) TYPE = MyISAM;

Create table postnummer (
    post_nr Int UNSIGNED NOT NULL ,
    bynavn Varchar(30) NOT NULL ,
Primary Key (post_nr)) TYPE = MyISAM;

Create table producent (
    producent_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    navn Char(30) NOT NULL ,
Primary Key (producent_id)) TYPE = MyISAM;

Create table produkter (
    produkt_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    navn Varchar(50) NOT NULL ,
    producent_id Int UNSIGNED NOT NULL ,
Primary Key (produkt_id)) TYPE = MyISAM;

Create table ord (
    ord_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    ord Varchar(30) NOT NULL ,
Primary Key (ord_id)) TYPE = MyISAM;

Create table produkter_ord (
    ord_id Int UNSIGNED NOT NULL ,
    produkt_id Int UNSIGNED NOT NULL ) TYPE = MyISAM;

Create table kunde_produkter (
    kunde_id Int UNSIGNED NOT NULL ,
    produkt_id Int UNSIGNED NOT NULL ) TYPE = MyISAM;

Create table email (
    email_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    produkt_id Int UNSIGNED NOT NULL ,
    e_from Varchar(100) NOT NULL ,
    e_subject Varchar(100) NOT NULL ,
    e_date Varchar(100) NOT NULL ,
Primary Key (email_id)) TYPE = MyISAM;












Alter table kunde_produkter add Index IX_kunde_knudeprodukter (kunde_id);
Alter table kunde_produkter add Foreign Key (kunde_id) references Kunde (kunde_id);
Alter table Kunde add Index IX_kunde_postnummer (post_nr);
Alter table Kunde add Foreign Key (post_nr) references postnummer (post_nr);
Alter table produkter add Index IX_produkter_producent (producent_id);
Alter table produkter add Foreign Key (producent_id) references producent (producent_id);
Alter table produkter_ord add Index IX_produkter_hit (produkt_id);
Alter table produkter_ord add Foreign Key (produkt_id) references produkter (produkt_id);
Alter table kunde_produkter add Index IX_produkter_kundeprodukter (produkt_id);
Alter table kunde_produkter add Foreign Key (produkt_id) references produkter (produkt_id);
Alter table email add Index IX_produkt_email (produkt_id);
Alter table email add Foreign Key (produkt_id) references produkter (produkt_id);
Alter table produkter_ord add Index IX_ord_hit (ord_id);
Alter table produkter_ord add Foreign Key (ord_id) references ord (ord_id);







/* Users permissions */
Avatar billede skeleton Nybegynder
30. november 2003 - 00:54 #23
fik vidst lige pasted det forkerte.
Avatar billede skeleton Nybegynder
30. november 2003 - 00:57 #24
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"

int main() {
    MYSQL *handle;
    int id;
    char sqlcmd[1000];
    char from[100] = "fro_test";
    char subject[100] = "sub_test";
    char date[100] = "dat_test";
    int ii = 1;

    handle= mysql_init(NULL);

    /* */
    if(handle == NULL) {
        printf("MySQL error1: %s", mysql_error(handle));
        exit(1);
    }

    /* Laver connection til databasen */
    if(!mysql_real_connect(handle, "localhost", "*******", "*****", "*****", 0, NULL, 0)) {
        printf("MySQL error2: %s", mysql_error(handle));
        exit(1);
    }

    /* Inds&#65533;ter data i tabellen email */
    sprintf(sqlcmd,"insert into email values(%d, %d, '%s', '%s', '%s')",ii,ii,from,subject,date);
    if(!mysql_query(handle, sqlcmd)) {
      printf("MySQL error3: %s", mysql_error(handle));
    }

    /* Lukker connection til databasen */
    mysql_close(handle);
    return 0;
}


Ryger ind i Error3 hvergang, jeg ved ikke helt om min sprintf er rigtig systaks mæssigt.
Avatar billede skeleton Nybegynder
30. november 2003 - 01:00 #25
så er det vidst sengetid.
hjernen kører vidst ikke mere :-)

det virker ved ikke lige hvorfor jeg ikke kunne få det til at køre før men nevermind.
Avatar billede skeleton Nybegynder
30. november 2003 - 01:03 #26
seriøst nu går jeg i seng.
jeg får indsat mine data men ryger ind i error3 alligevel???
håber det har løst sig selv i morgen.
Avatar billede arne_v Ekspert
30. november 2003 - 10:06 #27
Hvad er error teksten ?
Avatar billede skeleton Nybegynder
30. november 2003 - 18:24 #28
printf("MySQL error3: %s", mysql_error(handle));

---- error ----
insert into email(e_from, e_subject, e_date) values('fro_test', 'sub_test', 'dat_test')MySQL error3:

men intet efter : ????????
Avatar billede skeleton Nybegynder
30. november 2003 - 18:37 #29
/*************************************************************\
* Auhter:                                                  *
* Projekt:    Incident                                    *
* Date:        08-12-03                                    *
*                                                          *     
* Execute:    ./%programname% < %textfile%                *
*                                                          *
* Description: takes a textfile as input.                  *
*              scans it for keywords (FROM, SUBJECT, DATE). *
*              When found take the rest of the line as VAR. *
*              puts VAR in a MySQL database.                *
*                                                          *
\*************************************************************/

/* Include Headers */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "mysql.h"
#include <stdlib.h>
#define linsize 10000

/* Program START */
int main () {
  /* Program Variables */
  char inlin[linsize];
  char from[] = "From: ", subject[] = "Subject: ", date[] = "Date: ";
  char *p_from, *p_subject, *p_date;

  /* MySQL Variables */
  MYSQL *handle;
  char sqlcmd[1000];
  char d_from[100] = "fro_test";
  char d_subject[100] = "sub_test";
  char d_date[100] = "dat_test";

  handle= mysql_init(NULL);

  if(isatty(fileno(stdin))){
    printf("You must \"PIPE\" a file to the program. Contact admin for instructions.\n");
    return 1;
  }

  /* Read %textfile% line by line*/
  while (!feof(stdin)) {
    fgets(inlin, linsize, stdin);
    /* Copy the rest of the line to variabel if found */
    p_from = strstr(inlin,from);
    p_subject = strstr(inlin,subject);
    p_date = strstr(inlin,date);
    /* IF "From: " found */
    if(p_from != NULL) {
      p_from += strlen(from);
    }
    /* IF "Subject: " found */
    if(p_subject != NULL) {
      p_subject += strlen(subject);
    }
    /* IF "Date: " found */
    if(p_date != NULL) {
      p_date += strlen(date);
    }
  }

  /* Init connection to MySQL Database */
  if(handle == NULL) {
      printf("MySQL error1: %s", mysql_error(handle));
      exit(1);
  }
 
  /* Make connection to MySQL Database */
  if(!mysql_real_connect(handle, "localhost", "**", "**", "**", 0, NULL, 0)) {
    printf("MySQL error2: %s", mysql_error(handle));
    exit(1);
  }
 
  /* Insert data in email.incident in Mysql Database */
  sprintf(sqlcmd,"insert into email(e_from, e_subject, e_date) values('%s', '%s', '%s')",d_from,d_subject,d_date);
  if(!mysql_query(handle, sqlcmd)) {
    printf(sqlcmd);
    printf("MySQL error3: %s", mysql_error(handle));
  }
 
  /* Close connection to MySQL Database */
  mysql_close(handle);
 
  return 0;
}
Avatar billede skeleton Nybegynder
30. november 2003 - 18:41 #30
Basic så skal værdierne fra *p_from, *p_subject, *p_date indsættes i min DB.
Avatar billede arne_v Ekspert
30. november 2003 - 19:26 #31
Der er ikke noget som springer i øjnene.

Prøv evt med:

printf("MySQL error3: %s\n", mysql_error(handle));
Avatar billede skeleton Nybegynder
01. december 2003 - 19:47 #32
hej igen arne_v

Så er jeg på den igen.

hvis jeg nu ønsker at udtrække nogle værdier(ord) fra en tabel(ord)
  mysql_query(handle, "SELECT * FROM ord");
  result = mysql_store_result(handle);
  nfields = mysql_num_fields(result);
  while ((row = mysql_fetch_row(result))) {
      l = (int *)mysql_fetch_lengths(result);
      for (i=0; i<nfields; i++) {
          printf(" %.*s", l[i], row[i] ? row[i] : "NULL");
      }
      printf("\n");
  }

men istedet for at printe det hele ønsker jeg at gemme row[2] over i en var så jeg kan teste den imod noget af min anden kode.
Avatar billede skeleton Nybegynder
01. december 2003 - 19:48 #33
kan man så bare
      var=row[2];

istedet for
      for (i=0; i<nfields; i++) {
          printf(" %.*s", l[i], row[i] ? row[i] : "NULL");
      }
Avatar billede arne_v Ekspert
01. december 2003 - 19:51 #34
Jeg vil foreslå:

char buf[1000];
...
strncpy(buf,row[2],l[2]);
buf[l[2]] = '\0';

og husk at row[2] er tredie felt i current row - ikke anden row.
Avatar billede skeleton Nybegynder
01. december 2003 - 19:54 #35
hvad gør buf[l[2]] = '\0';
Avatar billede skeleton Nybegynder
01. december 2003 - 19:58 #36
while ((row = mysql_fetch_row(result))) {
    l = (int *)mysql_fetch_lengths(result);
    for (i=0; i<nfields; i++) {
      strncpy(varr,row[2],l[i]);
      printf("\nvarr: %s",varr);
    }
    printf("\n");
  }

-----------------------
varr: w
varr: w
varr: word

varr: eord
varr: eord
varr: excel

varr: oxcel
varr: oxcel
varr: office

varr: bffice
varr: bffice
varr: brightstore

varr: orightstore
varr: orightstore
varr: open viewre

mit ouput ser lidt sjovt ud...
Avatar billede arne_v Ekspert
01. december 2003 - 20:01 #37
sætter terminerende nul byte
Avatar billede skeleton Nybegynder
01. december 2003 - 20:02 #38
fik slettet for og ændret lidt, så er mit sjove output væk
Avatar billede arne_v Ekspert
01. december 2003 - 20:02 #39
for (i=0; i<nfields; i++) {  //  for alle felter
      strncpy(varr,row[2],l[i]); // kopier felt 2 med felt i's længde
      printf("\nvarr: %s",varr);
}

Jeg tror du mener:

for (i=0; i<nfields; i++) {  //  for alle felter
      strncpy(varr,row[i],l[i]); // kopier felt i med felt i's længde
      varr[l[i]]='\0'; // terminer string ordentligt
      printf("\nvarr: %s",varr);
}
Avatar billede skeleton Nybegynder
01. december 2003 - 20:37 #40
if(p_subject != NULL) {
  if(p_subject[strlen(p_subject)-1]=='\n') {
    p_subject[strlen(p_subject)-1]='\0';
  }
  p_subject += strlen(subject);
  strcpy(d_subject, p_subject);
  while ((row = mysql_fetch_row(result))) {
    strcpy(varr,row[2]);
    printf("\nVarr: %s", varr);
      }
    }

-------------------
SEGMENTATION FAULT
-------------------
Avatar billede skeleton Nybegynder
01. december 2003 - 20:38 #41
if(p_subject != NULL) {
  if(p_subject[strlen(p_subject)-1]=='\n') {
    p_subject[strlen(p_subject)-1]='\0';
  }
  p_subject += strlen(subject);
  strcpy(d_subject, p_subject);
/*  while ((row = mysql_fetch_row(result))) {
      strcpy(varr,row[2]);
      printf("\nVarr: %s", varr);
    }
*/
}

ingen fejl
Avatar billede arne_v Ekspert
01. december 2003 - 20:43 #42
Brug mysql_fetch_lengths og strncpy.
Avatar billede skeleton Nybegynder
01. december 2003 - 21:54 #43
nu skal jeg køre denne løkke flere gange, hvordan nulstiller jeg row.

eller er det en bedre ide at gemme værdierne et sted i programmet og bruge dem i min løkke??
Avatar billede arne_v Ekspert
01. december 2003 - 21:58 #44
Hvad mener du med nulstiller row ?

Den får da automatisk en ny værdi for hver gennemløb.
Avatar billede skeleton Nybegynder
01. december 2003 - 22:02 #45
i mit prog indlæser jeg en linie fra en tekst fil.
så skal jeg teste om mit ord fra db er i linien.
så tester jeg på næste ord fra db...........................
......
......
så indlæser jeg næste linie af tekstfilen
nu skal jeg så teste på de samme værdier fra db igen.
Avatar billede arne_v Ekspert
01. december 2003 - 22:07 #46
Du vil læse forfra i databasen.

Så må du enten lave SELECT igen.

Eller læse alt op fra db til memory og teste op mod memory.
Avatar billede skeleton Nybegynder
01. december 2003 - 22:48 #47
Når jeg nu søger en tekstfil igennem og
indsætter (From, Subject, Date) i en tabel, hvor jeg har et id felt der er auto_increment.
Så når jeg finder nogle ord(fra en anden tabel) der skal høre sammen med den første.
hvordan får jeg så det %nr% id feldtet er kommet til.

fx.

Tabel email
id from    subject          date
23 me@me.me dette er en test 03-12-12

Tabel ord
id ord
23 ord1
23 ord2
23 ord3
Avatar billede arne_v Ekspert
01. december 2003 - 22:52 #48
SELECT LAST_INSERT_ID()

returnerer sidste auto increment genererede key.
Avatar billede skeleton Nybegynder
01. december 2003 - 22:59 #49
noget ligende
int id;
sprintf(id,("SELECT LAST_INSERT_ID(email)+1));
Avatar billede skeleton Nybegynder
01. december 2003 - 23:01 #50
int id;
  sprintf(sqlcmd,"SELECT LAST_INSERT_ID()");
  id = mysql_query(handle, id);
  printf("id: %s",id);
Avatar billede arne_v Ekspert
01. december 2003 - 23:01 #51
Nej noget ligende:

mysql_query(handle, "SELECT LAST_INSERT_ID()");

og læs resultat som en anden SELECT.
Avatar billede sukos Juniormester
01. december 2003 - 23:08 #52
Det her er da vist et spm som virkelig er eksperten.dk "værdigt"! :O) Fedt manner!!!
Og arne_v er vist ret sej? :O)
Avatar billede skeleton Nybegynder
01. december 2003 - 23:10 #53
Arne_V er rigtig sej
Avatar billede skeleton Nybegynder
01. december 2003 - 23:30 #54
sprintf(lastid,"SELECT(SELECT LAST_INSERT_ID() FROM email)");
or
  sprintf(lastid,"SELECT(SELECT LAST_INSERT_ID() AS email_id FROM email)");

returns: -1
Avatar billede arne_v Ekspert
02. december 2003 - 07:46 #55
sprintf(lastid,"SELECT LAST_INSERT_ID()");

siger MySQL docs.

(og når der ikke er nogen %d eller %s er der jo slet ikke grund til sprintf)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester