in reply to Perl and Mysql Queries

OK -- sorry to hear that things have gotten worse. In order to better help you, we'll need a) the complete script that's failing (assuming it's not 400 lines long), and b) the error(s) that you got. Ideally, the lines on the errors will line up with the source code.

You haven't mentioned if the data made it to the database OK (but it sounds like it did). I'm also wondering if you tried to insert the same row twice, causing the database to reject the second insert because it made for a duplicate primary key.

Alex / talexb / Toronto

Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

Replies are listed 'Best First'.
Re^2: Perl and Mysql Queries
by Milti (Beadle) on Jun 10, 2024 at 19:35 UTC

    Here are the error messages:

    [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Premature en +d of script headers: job_post_test.pl, referer: http://diversitylink. +com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Bareword fou +nd where operator expected at E:\\Pinnacle\\DiversityLink\\cgi-bin\\j +ob_post_test.pl line 38, near "my$sth =$dbh->prepare("INSERT", refere +r: http://diversitylink.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] (Might be +a runaway multi-line "" string starting on line 37), referer: http:// +diversitylink.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Semicolon se +ems to be missing at E:\\Pinnacle\\DiversityLink\\cgi-bin\\job_post_t +est.pl line 38., referer: http://diversitylink.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Use of ?PATT +ERN? without explicit operator is deprecated at E:\\Pinnacle\\Diversi +tyLink\\cgi-bin\\job_post_test.pl line 39., referer: http://diversity +link.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] syntax error + at E:\\Pinnacle\\DiversityLink\\cgi-bin\\job_post_test.pl line 38, n +ear "my$sth =$dbh->prepare("INSERT INTO ", referer: http://diversityl +ink.com/ [Mon Jun 10 12:18:31 2024] [error] [client 73.21.226.229] Search patte +rn not terminated or ternary operator parsed as search pattern at E:\ +\Pinnacle\\DiversityLink\\cgi-bin\\job_post_test.pl line 39., referer +: http://diversitylink.com/

    Here is the entire code:

    #!C:/Perl/bin/perl -w ##post_jobs.pl use CGI qw(:standard); use DBI; print "Content-type: text/html\n\n"; ###use POSIX qw(strftime); ####$shortdate = strftime "%B %d, %Y", localtime; $JobID=param('JobID'); $EmployerID=param('EmployerID'); $EmployerName=param('EmployerName'); $Title=param('Title'); $Logo=param('Logo'); $City=param('City'); $StateProvince=param('StateProvince'); $Description=param('Description'); $Function=param('Function'); $Sector=param('Sector'); $Country=param('Country'); $Posted=param('Posted'); if ($JobID eq ""||$EmployerID eq ""||$EmployerName eq ""||$Title eq "" +||$Logo eq ""||$City eq ""||$StateProvince eq ""||$Description eq ""| +| $Function eq ""||$Sector eq ""||$Country eq ""||$Posted eq ""||$Logo e +q "") { print "The FORM is INCOMPLETE"; } else { my$dbh = DBI->connect('dbi:mysql:jobs_db', "Poster','Poster Password') +; my$sth =$dbh->prepare("INSERT INTO jobs (JobID,EmployerID,EmployerName +,Title,City,StateProvince,Description,Function,Sector,Country,Posted) Values(?,?,?,?,?,?,?,?,?,?,?)"); $sth ->execute($JobID,$EmployerID,$EmployerName,$Title,$City,$StatePro +vince,$Description,$Function,$Sector,$Country,$Posted); $sth ->finish(); $dbh->disconnect (); } #!/usr/local/bin/perl print "Your Ad Was Posted.\n"; exit;

      It's always a good idea (and good defensive programming) to check the results of things as you go. So, I'd write

      my $dbh = DBI->connect('dbi:mysql:jobs_db', "Poster', 'Poster Password'); defined $dbh or die "Unable to connect to DB: " . $dbh->errstr; my $sth =$dbh->prepare("INSERT INTO jobs (JobID,EmployerID, EmployerName,Title,City,StateProvince,Description,Function, Sector,Country,Posted) Values(?,?,?,?,?,?,?,?,?,?,?)"); defined $sth or die "Unable to prepare insert: " . $dbh->errstr; $sth->execute($JobID,$EmployerID,$EmployerName,$Title,$City, $StateProvince,$Description,$Function,$Sector,$Country,$Posted) or die "Failed to execute insert: " . $dbh->errstr;
      The die statements will leave something informative in your log file, and will give you information about what's failing. And I'm also going to encourage you to add
      use strict; use warnings;
      at the top of all of your scripts. Generally, your scripts should compile cleanly, and should not put any warnings in the error log. If there are warnings, fix them.

      Alex / talexb / Toronto

      Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

        Now gettin these errors: Tue Jun 11 05:09:26 2024 error client 73.21.226.229 DBI connect('jobs_db','poster',...) failed: Client does not support authentication protocol requested by server; consider upgrading MySQL client at E:\\Pinnacle\\DiversityLink\\cgi-bin\\job_post_test.pl line 36., referer: http://diversitylink.com/ Tue Jun 11 05:09:26 2024 error client 73.21.226.229 Can't call method "prepare" on an undefined value at E:\\Pinnacle\\DiversityLink\\cgi-bin\\job_post_test.pl line 37., referer: http://diversitylink.com/

        Historically the DBI connect statement worked fine, at least with Mysql 5.7. I haven't a clue as to what the 'Can't call method "prepare' error means by 'undefined value'.

      At line 37 where you connect you have "Poster'. Perhaps that is just a typo in your post? If I run that code I get the same error as you posted which is caused by that incorrect quoting.
      Bareword found where operator expected at /tmp/b.pl line 38, near "my$ +sth =$dbh->prepare("INSERT" (Might be a runaway multi-line "" string starting on line 37) Semicolon seems to be missing at /tmp/b.pl line 38. String found where operator expected at /tmp/b.pl line 39, near "print + "" (Missing semicolon on previous line?)
        That's going to be the problem. Generally, this sort of thing can be detected with e.g.:
        perl -cw filename.cgi
        Also, the OP desperately needs to start using git or similar SCM so they can see literally what changed between "it's working" and "it's not working".
      Might be a runaway multi-line "" string starting on line 37

      might have been a clue!

      Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond