Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 25196 invoked from network); 26 Jan 2010 07:59:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 26 Jan 2010 07:59:31 -0000 Received: (qmail 10855 invoked by uid 500); 26 Jan 2010 07:59:30 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 10735 invoked by uid 500); 26 Jan 2010 07:59:29 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Delivered-To: moderator for dev@apr.apache.org Received: (qmail 92538 invoked by uid 99); 26 Jan 2010 05:22:57 -0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of liuxulin@gmail.com designates 209.85.223.173 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:content-type :content-transfer-encoding; bh=1HcAh7dOT9OoRTCDd1aGPSPoYQPfa/9KV7SVoP+pCC4=; b=fSlVqSaajRIstg5Dd5R190gkyhFGuY3gTcc9Dh25nEzBsvlfXJnMwDP/mMSk/2w7tQ Zl0+Kra9kB5FXnEfIDbve8TH/eiG8+k4W7IrdHxjDfzgptZrXF/piMC8PPqsRrgjZra+ ckYGMR1CFM8kfZaN1MXgNmS9Kqv3S8alZDAkM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; b=VeAtkOU8MM9FEYdxb40KOLAt/khau0gAvZu9iQxdxNI6h8TtsP9ZQjZyo1ejoZ1obp J0voeTrgLiaBqotYKt7xybtv5emsMUEVO23mt6YZRtdmWAtIKs67YhGhXwY9OXg9Ly0y a+82lwxJ5M3AgKXxISCdLSWT8KjC00GRP+JXw= Message-ID: <4B5E7C9F.6060202@gmail.com> Date: Tue, 26 Jan 2010 13:24:47 +0800 From: liuxulin User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: dev@apr.apache.org Subject: About DBD Prepare Statement Problem Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable hi everybody, I've got some problems, hope for your helps. 1. When i try to connect Mysql with 'apr-util DBD' , But get some errors.= After executing 'apr_dbd_pvselect', I got the result 'empty value'. But i can get correct result with the 'apr_dbd_select' method. in my code: entry =3D apr_dbd_get_entry(driver, row, n); =20 but I got nothing. How to fix the 'empty value' problem? 2. I try to query "select * from ..." but got a "Exec of prepared=20 statement failed!" But "select userName from ..." makes the right results. Is there anything wrong? Thanks for your helps and replies! My code is as follows: =20 Environment: apr-util : 1.3.9 ubuntu : 9.04 mysql : 5.0.75 =20 TABLE Structure: CREATE TABLE `testTable` { `id` int(11) NOT NULL, `userName` varchar(100) NOT NULL, PRIMARY KEY (`id`) }ENGINE=3DMyISAM DEFAULT CHARSET=3Dlatin1; =20 Source=EF=BC=9A #include "apu.h" #include "apr_pools.h" #include "apr_dbd.h" #include int main(int argc, char **argv) { const char *name =3D "mysql"; const char *params =3D "host=3D127.0.0.1,user=3Droot,pass=3D123456,dbname=3DtestDB,p= ort=3D3306"; apr_pool_t *pool =3D NULL; apr_dbd_t *sql =3D NULL; const apr_dbd_driver_t *driver =3D NULL; int rv; const char *query =3D "SELECT userName FROM testTable where=20 id=3D%d";/*this query exec info:ok!!!*/ //const char *query =3D "SELECT * FROM testTable where id=3D%d";/*thi= s=20 query exec info:"Exec of prepared statement failed!"???*/ const char *label =3D "getUserName"; apr_dbd_prepared_t *statement =3D NULL; apr_dbd_results_t *res =3D NULL; apr_dbd_row_t *row =3D NULL; const char *entry =3D NULL; int i, n; apr_initialize(); apr_pool_create(&pool, NULL); apr_dbd_init(pool); rv =3D apr_dbd_get_driver(pool, name, &driver); switch (rv) { case APR_SUCCESS: printf("Loaded %s driver OK.\n", name); break; case APR_EDSOOPEN: printf("Failed to load driver file apr_dbd_%s.so\n", name); goto finish; case APR_ESYMNOTFOUND: printf("Failed to load driver apr_dbd_%s_driver.\n", name); goto finish; case APR_ENOTIMPL: printf("No driver available for %s.\n", name); goto finish; default: /* it's a bug if none of the above happen */ printf("Internal error loading %s.\n", name); goto finish; } rv =3D apr_dbd_open(driver, pool, params, &sql); switch (rv) { case APR_SUCCESS: printf("Opened %s[%s] OK\n", name, params); break; case APR_EGENERAL: printf("Failed to open %s[%s]\n", name, params); goto finish; default: /* it's a bug if none of the above happen */ printf("Internal error opening %s[%s]\n", name, params); goto finish; } rv =3D apr_dbd_prepare(driver, pool, sql, query, label, &statement); if (rv) { printf("Prepare statement failed!\n%s\n", apr_dbd_error(driver, sql, rv)); return rv; } int user_id =3D 1; rv =3D apr_dbd_pvselect(driver, pool, sql, &res, statement, 0,=20 &user_id, NULL); if (rv) { printf("Exec of prepared statement failed!\n%s\n", apr_dbd_error(= driver, sql, rv)); return rv; } i =3D 0; for (rv =3D apr_dbd_get_row(driver, pool, res, &row, -1); rv =3D=3D 0= ; rv =3D apr_dbd_get_row(driver, pool, res, &row, -1)) { printf("ROW %d: ", ++i); for (n =3D 0; n < apr_dbd_num_cols(driver, res); ++n) { entry =3D apr_dbd_get_entry(driver, row, n); if (entry =3D=3D NULL) { printf("(null) "); } else { printf("%s ", entry);/*printf Nothing???*/ } } fputs("\n", stdout); } finish: printf("finish"); apr_pool_destroy(pool); apr_terminate(); =20 return 0; }