Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to "verify" your details, making threats, or asking for money, are
spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the
password reset link.
Entire forum
➜ SMAUG
➜ SMAUG coding
➜ Smaug and MySQL
It is now over 60 days since the last post. This thread is closed.
Refresh page
Pages: 1 2
Posted by
| Gohan_TheDragonball
USA (183 posts) Bio
|
Date
| Thu 02 Mar 2006 04:16 PM (UTC) Amended on Thu 02 Mar 2006 04:17 PM (UTC) by Gohan_TheDragonball
|
Message
| I am trying to connect my mud to my sql server to update statistics which are being displayed on our website. I got the code working from a snippet, and everything compiles fine. However it keeps loosing the connection before its able to perform the queries. Can anyone tell me whats wrong with the following.
#define MYSQL_SERVER '127.0.0.1'
#define MYSQL_DB 'thedragonball'
#define MYSQL_USER '****'
#define MYSQL_PWD '******'
int stats_update_mkills(CHAR_DATA *attacker)
{
MYSQL *hnd;
char sql[1000];
if ( (hnd = mysql_init(NULL)) == NULL ) {
return -1;
}
if ( mysql_real_connect(hnd,MYSQL_SERVER,MYSQL_USER,MYSQL_PWD,MYSQL_DB,1210,NULL,0) == NULL ) {
char buf[MAX_STRING_LENGTH];
sprintf( buf, 'Stats_Update_Mkills: Error: %s', mysql_error(hnd) );
monitor_chan( buf, MONITOR_GEN_IMM, LEVEL_IMMORTAL );
mysql_close(hnd);
return -2;
}
sprintf(sql,'update mud_player_stats set mkills = %d where player = '%s'', attacker->pcdata->mkills, attacker->name );
if ( mysql_real_query(hnd, sql, strlen(sql)) != 0 ) {
monitor_chan( 'Stats_Update_Mkills: stage 2 failed', MONITOR_GEN_IMM, LEVEL_IMMORTAL );
mysql_close(hnd);
return -3;
}
if ( mysql_affected_rows(hnd) == 0 ) {
sprintf(sql,'insert into mud_player_stats values( '%s', 0, %d, 0, 0, 0, 0 )', attacker->name, attacker->pcdata->mkills );
if ( mysql_real_query(hnd, sql, strlen(sql)) != 0 ) {
monitor_chan( 'Stats_Update_Mkills: stage 3 failed', MONITOR_GEN_IMM, LEVEL_IMMORTAL );
mysql_close(hnd);
return -4;
}
}
mysql_close(hnd);
return 0;
}
This is what I keep getting: Error: Lost connection to MySQL server during query | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #1 on Thu 02 Mar 2006 05:31 PM (UTC) |
Message
| sprintf(sql,'update mud_player_stats set mkills = %d where player = '%s'', attacker->pcdata->mkills, attacker->name );
Is that truly what you have in your code? How does that even compile -- don't you need double-quotes? |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| Nick Cash
USA (626 posts) Bio
|
Date
| Reply #2 on Thu 02 Mar 2006 05:38 PM (UTC) |
Message
| You might do better to go with a global one time connection (presumably on startup) rather than connecting to the DB each time you want to do a query (supposing you plan to use MySQL in any significant form). |
~Nick Cash
http://www.nick-cash.com | Top |
|
Posted by
| Gohan_TheDragonball
USA (183 posts) Bio
|
Date
| Reply #3 on Thu 02 Mar 2006 06:34 PM (UTC) |
Message
| Well, if I can't connect even once, how will changing it to a global connection and ran at startup change it. While I do agree, I would prefer to only connect once and point to that connection rather than multiple connection and disconnects, I first need to figure out why it won't connect. | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #4 on Thu 02 Mar 2006 06:47 PM (UTC) |
Message
| Did you check my post? Your posted code just isn't right, so I suspect you didn't post exactly what your code is.
In fact, all of your strings use single quotes and not double quotes, so I'm not sure quite what you're doing. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #6 on Thu 02 Mar 2006 07:54 PM (UTC) |
Message
| "I am using double quotes with 'single' quotes inside"
I'm not sure what the problem with double quotes is. If you could post your code again, with double-quotes so I can see exactly what's going on, that would be helpful. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| Gohan_TheDragonball
USA (183 posts) Bio
|
Date
| Reply #7 on Thu 02 Mar 2006 08:06 PM (UTC) |
Message
| I should also mention its failing at the mysql_real_connect() part, so the queries are not whats failing. | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #8 on Thu 02 Mar 2006 09:32 PM (UTC) |
Message
| OK... it's important to know that it wasn't the queries.
The usual questions:
- are you sure that the DB is up and running?
- are you sure that you have the right user/pass?
- are you sure that the DB has privileges set up correctly to allow your user/pass from local connections?
- is there some strange firewall configuration that would somehow be blocking local connections on that port?
- can you connect to the DB otherwise e.g. from perl or php? |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| Gohan_TheDragonball
USA (183 posts) Bio
|
Date
| Reply #9 on Fri 03 Mar 2006 04:47 AM (UTC) Amended on Fri 03 Mar 2006 04:49 AM (UTC) by Gohan_TheDragonball
|
Message
|
Quote:
The usual questions:
- are you sure that the DB is up and running?
- are you sure that you have the right user/pass?
- are you sure that the DB has privileges set up correctly to allow your user/pass from local connections?
- is there some strange firewall configuration that would somehow be blocking local connections on that port?
- can you connect to the DB otherwise e.g. from perl or php?
i am sorry i guess i should have mentioned those things as well, i tend to assume too much. my website which is also local running php can connect and query the database just fine. the password/user is correct as well. the mud is located in the same shell as the website, so that is not an issue as well. the only thing i can assume is because i am trying to connect to it from a MUD.
One of my theories is that the database is trying to write back to the mud, the mud is not correctly handling it, and it is failing. Should that be the case I would not in a million years know how to fix it. | Top |
|
Posted by
| Nick Cash
USA (626 posts) Bio
|
Date
| Reply #10 on Fri 03 Mar 2006 03:17 PM (UTC) |
Message
| Try changing the port number in your mysql_real_connect call to 0.
It would then look like:
mysql_real_connect(hnd,MYSQL_SERVER,MYSQL_USER,MYSQL_PWD,MYSQL_DB,0,NULL,0)
|
~Nick Cash
http://www.nick-cash.com | Top |
|
Posted by
| Gohan_TheDragonball
USA (183 posts) Bio
|
Date
| Reply #11 on Fri 03 Mar 2006 06:10 PM (UTC) |
Message
| Changing the port from 1210 to 0 gave me this: [IMM_GEN] Stats_Player_Killed_Monster: Error: Can't connect to MySQL server on '127.0.0.1' (111)
Another thing I tried was changing MYSQL_SERVER to "127.0.0.1:1210" and that didn't work either, got this: [IMM_GEN] Stats_Player_Killed_Monster: Error: Unknown MySQL Server Host '127.0.0.1:1210' (3) | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #12 on Fri 03 Mar 2006 08:25 PM (UTC) |
Message
| No, you can't put the port into the IP address when making the connection call.
Are you *sure* that the connection is failing? Looking through the error messages for mysql_real_connect:
http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html
doesn't list that error. It does however list a number of interesting things, such as mismatching protocol versions. Are you sure you have matching/compatible protocol/library versions?
If you could get the error name as opposed to error text (e.g. get CR_CONNECTION_ERROR) that would help pinpoint the problem. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #14 on Sat 04 Mar 2006 11:30 AM (UTC) |
Message
| OK. Have you checked all the connection options? Namely, init-command.
The documentation is here:
http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html
There should be a link somewhere there, or not far away, that shows how to get the current options.
Obviously PHP is connecting slightly differently from the C library... |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).
To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.
43,287 views.
This is page 1, subject is 2 pages long: 1 2
It is now over 60 days since the last post. This thread is closed.
Refresh page
top